/**
 * Blog Types
 * Định nghĩa các interface cho Blog system
 */

export interface BlogCategory {
  _id?: string;
  name: string;
  slug: string;
  description?: string;
  postCount?: number;
  isActive?: boolean;
  createdAt?: string;
  updatedAt?: string;
}

export interface BlogTag {
  _id?: string;
  name: string;
  slug: string;
  postCount?: number;
  isActive?: boolean;
  createdAt?: string;
  updatedAt?: string;
}

export interface BlogComment {
  _id?: string;
  postId?: string;
  authorName: string;
  authorAvatar?: string;
  content: string;
  createdAt: string;
  status?: 'pending' | 'approved' | 'rejected';
  parentId?: string;
  parentAuthorName?: string | null;
}

export interface BlogPost {
  _id?: string;
  title: string;
  slug: string;
  excerpt: string;
  content: string;
  category: string[];
  tags: string[];
  author: string;
  status: 'draft' | 'published';
  publishedAt: string;
  isFeatured: boolean;
  featuredImage: string;
  galleryImages?: string[];
  quote?: string;
  contentAfterQuote?: string;
  commentsCount: number;
  comments?: BlogComment[];
  createdAt?: string;
  updatedAt?: string;
}

export interface RecentPost {
  _id?: string;
  title: string;
  slug: string;
  thumbnail: string;
  publishedAt: string;
  originalPostId?: string;
  createdAt?: string;
  updatedAt?: string;
}

export interface BlogPagination {
  current: number;
  total: number;
  limit: number;
  totalItems: number;
}

export interface BlogListResponse {
  success: boolean;
  message: string;
  data: {
    blogs: BlogPost[];
    pagination: BlogPagination;
  };
}

export interface BlogDetailResponse {
  success: boolean;
  message: string;
  data: BlogPost;
}

export interface BlogFeaturedResponse {
  success: boolean;
  message: string;
  data: BlogPost[];
}

export interface BlogRecentResponse {
  success: boolean;
  message: string;
  data: RecentPost[];
}

export interface CategoryListResponse {
  success: boolean;
  message: string;
  data: BlogCategory[];
}

export interface CategoryDetailResponse {
  success: boolean;
  message: string;
  data: BlogCategory;
}

export interface TagListResponse {
  success: boolean;
  message: string;
  data: BlogTag[];
}

export interface TagDetailResponse {
  success: boolean;
  message: string;
  data: BlogTag;
}

export interface BlogQueryParams {
  page?: number;
  limit?: number;
  category?: string;
  tag?: string;
  search?: string;
}
