/**
 * 게시판 관리 타입 정의
 */

// ===== 게시판 타입 =====
export interface Board {
  id: string;
  boardCode: string;       // 게시판 코드
  name: string;            // 게시판명 (예: 공지사항, 자유게시판)
  description?: string;
  isSystem: boolean;       // 시스템 게시판 여부
  isActive: boolean;
  createdAt: string;
  updatedAt: string;
}

// ===== 게시글 타입 =====
export interface Post {
  id: string;
  boardId: string;          // 게시판 ID
  boardCode: string;        // 게시판 코드
  boardName: string;        // 게시판명
  title: string;            // 제목
  content: string;          // 내용 (HTML)
  authorId: string;         // 작성자 ID
  authorName: string;       // 작성자명
  authorDepartment?: string; // 작성자 부서
  authorPosition?: string;   // 작성자 직책
  isPinned: boolean;        // 상단 노출 여부 (공지)
  isSecret?: boolean;       // 비밀글 여부
  allowComments: boolean;   // 댓글 허용 여부
  viewCount: number;        // 조회수
  attachments: Attachment[]; // 첨부파일
  customFields?: CustomFieldValue[]; // 커스텀 필드 값
  createdAt: string;        // 등록일시
  updatedAt: string;        // 수정일시
}

// ===== 첨부파일 타입 =====
export interface Attachment {
  id: string;
  fileName: string;
  fileSize: number;
  fileUrl: string;
  mimeType: string;
}

// ===== 커스텀 필드 값 =====
export interface CustomFieldValue {
  field_key: string;
  field_value: string | null;
  field_name?: string;
}

// ===== 댓글 타입 =====
export interface Comment {
  id: string;
  postId: string;           // 게시글 ID
  authorId: string;         // 작성자 ID
  authorName: string;       // 작성자명
  authorDepartment?: string; // 작성자 부서
  authorPosition?: string;   // 작성자 직책
  authorProfileImage?: string; // 프로필 이미지
  content: string;          // 댓글 내용
  createdAt: string;        // 등록일시
  updatedAt: string;        // 수정일시
}

// ===== 필터/정렬 옵션 =====
export type SortOption = 'latest' | 'oldest' | 'viewCount';

export const SORT_OPTIONS: { value: SortOption; label: string }[] = [
  { value: 'latest', label: '최신순' },
  { value: 'oldest', label: '오래된순' },
  { value: 'viewCount', label: '조회순' },
];

export type BoardFilter = 'all' | 'my' | string; // 'all', 'my', 또는 boardCode

// ===== 폼 데이터 타입 =====
export interface PostFormData {
  boardCode: string;
  title: string;
  content: string;
  isPinned: boolean;
  isSecret?: boolean;
  allowComments: boolean;
  attachments: File[];
  customFields?: Record<string, string>;
}

export interface CommentFormData {
  content: string;
}

// ===== API 응답 타입 =====
export interface PostApiData {
  id: number;
  tenant_id: number | null;
  board_id: number;
  user_id: number;
  title: string;
  content: string;
  editor_type: string;
  ip_address: string | null;
  is_notice: boolean;
  is_secret: boolean;
  views: number;
  status: string;
  created_at: string;
  updated_at: string;
  created_by: number | null;
  updated_by: number | null;
  deleted_at: string | null;
  deleted_by: number | null;
  // 관계
  board?: {
    id: number;
    board_code: string;
    name: string;
  };
  author?: {
    id: number;
    name: string;
    department?: {
      id: number;
      name: string;
    };
    position?: string;
  };
  files?: FileApiData[];
  custom_field_values?: CustomFieldValue[];
}

export interface FileApiData {
  id: number;
  original_name: string;
  file_path: string;
  file_size: number;
  mime_type: string;
}

export interface PostPaginationResponse {
  current_page: number;
  data: PostApiData[];
  first_page_url: string;
  from: number | null;
  last_page: number;
  last_page_url: string;
  next_page_url: string | null;
  path: string;
  per_page: number;
  prev_page_url: string | null;
  to: number | null;
  total: number;
}

export interface ApiResponse<T> {
  success: boolean;
  data: T;
  message: string;
}

// ===== 게시글 필터 =====
export interface PostFilters {
  search?: string;
  is_notice?: boolean;
  status?: string;
  board_code?: string;
  per_page?: number;
  page?: number;
}

// ===== 탭 옵션 (게시판 탭) =====
export interface BoardTabOption {
  value: string;
  label: string;
  count?: number;
}