export interface IQuestionAuthor {
  id: number;
  name: string;
  isFollowed: boolean;
  rank: { id: number; name: string; category: string | null } | null;
  profileImage: {
    id: number;
    fileName: string;
    uniqueName: string;
    filePath: string;
    cdnUrl: string;
  } | null;
}

export interface IQuestionCategory {
  id: number;
  name: string;
  code: string;
}

export interface IQuestion {
  id: number;
  accountId: number;
  userId: number;
  title: string;
  code: string;
  description: string;
  status: string;
  mergedIntoQuestionId: number | null;
  isGoodQuestion: boolean;
  approvedByAdminId: number | null;
  approvedAt: string | null;
  rejectedReason: string | null;
  views: number;
  answersCount: number;
  likesCount: number;
  createdAt: string;
  updatedAt: string;
  deletedAt: string | null;
  author: IQuestionAuthor;
  isLiked: boolean;
  categories: IQuestionCategory[];
}

export interface IQuestionListResponse {
  page: number;
  perPage: number;
  totalRecords: number;
  totalPages: number;
  data: IQuestion[];
}

export interface IAnswerCommentReply {
  id: number;
  content: string;
  createdAt: string;
  author: IQuestionAuthor;
}

export interface IAnswerComment {
  id: number;
  content: string;
  createdAt: string;
  author: IQuestionAuthor;
  replies?: IAnswerCommentReply[];
}

export type ContentStatus =
  | "published"
  | "pending_approval"
  | "rejected"
  | "draft";

export interface IAnswer {
  id: number;
  questionId: number;
  userId: number;
  status: ContentStatus | string;
  rejectedReason: string | null;
  isFeatured: boolean;
  featuredAt: string | null;
  editedAt: string | null;
  requiresApproval: boolean;
  wordCount: number;
  likesCount: number;
  bookmarksCount: number;
  commentsCount: number;
  createdAt: string;
  updatedAt: string;
  deletedAt: string | null;
  author: IQuestionAuthor;
  isLiked: boolean;
  isBookmarked: boolean;
  body: string;
  comments?: IAnswerComment[];
  question?: Pick<
    IQuestion,
    "id" | "title" | "code" | "categories"
  > | null;
}

export interface IBookmarkListResponse {
  page: number;
  perPage: number;
  totalRecords: number;
  totalPages: number;
  data: IAnswer[];
}

export interface IAnswerListResponse {
  page: number;
  perPage: number;
  totalRecords: number;
  totalPages: number;
  data: IAnswer[];
}

export interface IQuestionDetail extends IQuestion {
  answers: IAnswer[];
  myAnswer?: IAnswer | null;
}
