import {
  type ActionRow,
  type Button,
  type ChannelSelectMenu,
  type MentionableSelectMenu,
  type PartialEmoji,
  type RoleSelectMenu,
  type StringSelectMenu,
  type TextInput,
  type UserSelectMenu,
  type LabelComponent,
  type ContainerComponent,
  type TextDisplayComponent,
  type SectionComponent,
  type MediaGalleryComponent,
  type SeparatorComponent,
  type FileComponent,
  type InteractionButton,
  type URLButton,
  type PremiumButton,
  type ThumbnailComponent,
} from '@projectdysnomia/dysnomia';

export type Component =
  | ActionRow
  | Button
  | StringSelectMenu
  | UserSelectMenu
  | RoleSelectMenu
  | MentionableSelectMenu
  | ChannelSelectMenu
  | TextInput
  | LabelComponent
  | ContainerComponent
  | TextDisplayComponent
  | SectionComponent
  | MediaGalleryComponent
  | SeparatorComponent
  | FileComponent
  | InteractionButton
  | URLButton
  | PremiumButton
  | ThumbnailComponent;

export type Element = Component | Promise<Component>;

export interface ElementClass {
  render: any;
}

export interface ElementAttributesProperty {
  props: {};
}

export interface IntrinsicElements {
  // Allow any element, but prefer known elements
  [elemName: string]: any;
  // Known elements
  ActionRow: { children: any | any[] };
  Button: {
    label: string;
    customId: string;
    style?: number;
    emoji?: PartialEmoji;
    disabled?: boolean;
  };
  Container: { color?: string; accent?: number; spoiler?: boolean; children: any | any[] };
  TextDisplay: { content: string };
}
