import {
  ComponentType,
  HTMLAttributes
} from 'react';

import {
  EIssueType,
  EIssueConsequence
} from '../enum';

export interface IIssue {
  title: string;
  code: string | JSX.Element;
  type: EIssueType;
  error?: string | string[];
  consequences: EIssueConsequence[];
}

export interface IFixing {
  propName: string;
  codeOld: string;
  codeNew: string;
  issues: IIssue[];
}

export interface ITestingProps<C extends ComponentType<any>> {
  component: C;
}

export interface IComponentTesterProps<C extends ComponentType<any>> extends HTMLAttributes<HTMLDivElement> {
  componentName: string;
  component: C;
  componentFusion: ComponentType<any>;
  componentTesting: ComponentType<ITestingProps<C>>;
  fixings?: IFixing[];
}

export interface IDemoDataRegion {
  id: string;
  name: string;
}

export interface IDemoDataAlbum {
  title: string;
  artist: string;
  year: number;
  tracks: string[];
}
