export type TIssueBoardKeys = "list" | "kanban" | "calendar" | "spreadsheet" | "gantt";

export interface IIssueBoardViews {
  key: TIssueBoardKeys;
  title: string;
  icon: string;
  className: string;
}

export type TIssuePriorityKey = "urgent" | "high" | "medium" | "low" | "none";
export type TIssuePriorityTitle = "Urgent" | "High" | "Medium" | "Low" | "None";
export interface IIssuePriorityFilters {
  key: TIssuePriorityKey;
  title: TIssuePriorityTitle;
  className: string;
  icon: string;
}

export type TIssueGroupKey = "backlog" | "unstarted" | "started" | "completed" | "cancelled";
export type TIssueGroupTitle = "Backlog" | "Unstarted" | "Started" | "Completed" | "Cancelled";

export interface IIssueGroup {
  key: TIssueGroupKey;
  title: TIssueGroupTitle;
  color: string;
  className: string;
  icon: React.FC;
}

export interface IIssue {
  id: string;
  comments: Comment[];
  description_html: string;
  label_details: any;
  name: string;
  priority: TIssuePriorityKey | null;
  project: string;
  project_detail: any;
  reactions: IIssueReaction[];
  sequence_id: number;
  start_date: any;
  state: string;
  state_detail: any;
  target_date: any;
  votes: IVote[];
}

export interface IIssueState {
  id: string;
  name: string;
  group: TIssueGroupKey;
  color: string;
}

export interface IIssueLabel {
  id: string;
  name: string;
  color: string;
}

export interface IVote {
  issue: string;
  vote: -1 | 1;
  workspace: string;
  project: string;
  actor: string;
  actor_detail: ActorDetail;
}

export interface Comment {
  actor_detail: ActorDetail;
  access: string;
  actor: string;
  attachments: any[];
  comment_html: string;
  comment_reactions: {
    actor_detail: ActorDetail;
    comment: string;
    id: string;
    reaction: string;
  }[];
  comment_stripped: string;
  created_at: Date;
  created_by: string;
  id: string;
  is_member: boolean;
  issue: string;
  issue_detail: IssueDetail;
  project: string;
  project_detail: ProjectDetail;
  updated_at: Date;
  updated_by: string;
  workspace: string;
  workspace_detail: WorkspaceDetail;
}

export interface IIssueReaction {
  actor_detail: ActorDetail;
  id: string;
  issue: string;
  reaction: string;
}

export interface ActorDetail {
  avatar?: string;
  display_name?: string;
  first_name?: string;
  id?: string;
  is_bot?: boolean;
  last_name?: string;
}

export interface IssueDetail {
  id: string;
  name: string;
  description: Description;
  description_html: string;
  priority: string;
  start_date: null;
  target_date: null;
  sequence_id: number;
  sort_order: number;
}

export interface Description {
  type: string;
  content: DescriptionContent[];
}

export interface DescriptionContent {
  type: string;
  attrs?: Attrs;
  content: ContentContent[];
}

export interface Attrs {
  level: number;
}

export interface ContentContent {
  text: string;
  type: string;
}

export interface ProjectDetail {
  id: string;
  identifier: string;
  name: string;
  cover_image: string;
  icon_prop: null;
  emoji: string;
  description: string;
}

export interface WorkspaceDetail {
  name: string;
  slug: string;
  id: string;
}

export interface IssueDetailType {
  [issueId: string]: {
    issue: IIssue;
    comments: Comment[];
    reactions: any[];
    votes: any[];
  };
}