./knowledge-base/frontend/src/types/index.ts

// 時代区分マスタ
export interface EraMaster {
  id: string;
  label: string;
}

// 番組マスタ
export interface ProgramMaster {
  id: string;
  name: string;
  created_at?: string;
}

// メンテナンス用資料サマリ
export interface DocumentSummary {
  document_id: string;
  title: string;
  programs: string[];
  document_genre?: string;
  era_labels?: string[];
  overall_status?: string;
  total_pages?: number;
  analyzed_count?: number;
  thumbnail_url?: string;
  created_at?: string;
}

export interface BookCountItem {
  name: string;
  filter_value: string;
  count: number;
}

export interface BookCountsResponse {
  total_books: number;
  era_counts: BookCountItem[];
  program_counts: BookCountItem[];
  unset_filter_value: string;
}

// 文献(書籍)レコード — DynamoDB booksTable のスキーマ
export interface BookRecord {
  document_id: string;
  title: string;
  era_labels: string[]; // 9ラベルから選択
  document_genre: string;
  programs: string[];
  thumbnail_s3_key?: string;
  thumbnail_url?: string; // Presigned URL(レスポンス時のみ)
  total_pages: number;
  analyzed_count: number;
  toc_s3_path?: string;
  toc_extracted: boolean;
  overall_status:
    | "pending"
    | "splitting"
    | "analyzing"
    | "analyzed"
    | "completed"
    | "failed"
    | "partial_completed";
  created_at: string;
  updated_at: string;
}

// 文献登録時のメタデータ
export interface BookMetadata {
  title: string;
  era_labels: string[];
  document_genre: string;
  programs?: string[];
}

// ページメタデータ(ページ固有の情報のみ)
export interface PageMetadata {
  tags: string[];
}

// 検索結果アイテム
export interface SearchResultItem {
  page_id: string;
  document_id: string;
  page_number: number;
  title: string;
  era: string; // 表示用(ラベルをJOINした文字列)
  era_labels: string[]; // 時代ラベル配列
  tags: string[];
  programs: string[];
  image_url: string;
  thumbnail_url: string;
  score: number;
  // AI解析結果
  document_genre?: string;
  chapter_context?: string; // 章コンテキスト(目次から生成)
  summary_policy?: string;
  ai_era_labels?: string[]; // AI判定した時代ラベル配列
  ocr_supplemental_info?: string[];
  extracted_text?: string;
  entities?: Array<{ type: string; value: string }>;
  topics?: string[];
  detected_objects?: string[];
  pdf_total_pages?: number;
}

// 検索レスポンス
export interface SearchResponse {
  total: number;
  page: number;
  page_size: number;
  results: SearchResultItem[];
}

// 検索リクエスト
export interface SearchRequest {
  query: string;
  filters?: {
    era?: string | string[]; // ラベル一致(単一または複数OR条件)
    title?: string; // タイトル専用検索
    tags?: string[];
    programs?: string[];
    document_id?: string;
    document_genre?: string; // 資料ジャンルフィルタ(新規追加)
  };
  page?: number;
  page_size?: number;
}

// アップロードリクエスト
export interface UploadRequest {
  document_id: string;
  page_number: number;
  metadata: PageMetadata;
  book_metadata?: BookMetadata; // page_number=1 のみ必須
  image_data?: string; // Base64
  image_url?: string;
}

// アップロードレスポンス
export interface UploadResponse {
  page_id: string;
  document_id: string;
  page_number: number;
  status: string;
  s3_uri: string;
  message: string;
}

// 処理ステータス
export interface ProcessingStatus {
  page_id: string;
  document_id: string;
  page_number: number;
  status:
    | "pending"
    | "analyzing"
    | "analyzed"
    | "embedding"
    | "completed"
    | "failed";
  created_at: string;
  updated_at: string;
  error_message?: string;
}

// 一括アップロードアイテム
export interface BulkUploadItem {
  document_id: string;
  page_number: number;
  metadata?: Partial<PageMetadata>;
  image_data?: string;
  image_url?: string;
}

// 一括アップロードリクエスト
export interface BulkUploadRequest {
  book_metadata: BookMetadata;
  items: BulkUploadItem[];
  metadata?: Partial<PageMetadata>; // 共通ページメタデータ
}

// 一括アップロードレスポンス
export interface BulkUploadResponse {
  total: number;
  success_count: number;
  failure_count: number;
  results: Array<{
    success: boolean;
    page_id?: string;
    error?: string;
  }>;
}

// PDFアップロードURLリクエスト
export interface PdfUploadUrlRequest {
  document_id: string;
  filename: string;
  book_metadata: BookMetadata;
}

// PDFアップロードURLレスポンス
export interface PdfUploadUrlResponse {
  document_id: string;
  upload_url: string; // S3 Presigned PUT URL
  s3_key: string;
  status: string;
  message: string;
}

// ページメタ情報更新リクエスト(要件①: 1ページ編集)
export interface UpdatePageMetadataRequest {
  title?: string;
  document_genre?: string;
  tags?: string[];
  programs?: string[];
  era_labels?: string[];
}

// 書籍メタ情報一括更新リクエスト
export interface UpdateDocumentMetadataRequest {
  title?: string;
  document_genre?: string;
  programs?: string[];
  era_labels?: string[];
}

// 書籍AI再解析オプション
export interface ReanalyzeDocumentRequest {
  /** true のとき AI が時代を再判定する(既定 false = 現在の時代設定を保持)*/
  reanalyze_era?: boolean;
}