import {
  Column,
  CreateDateColumn,
  Entity,
  ManyToOne,
  PrimaryGeneratedColumn,
  type Relation,
} from 'typeorm';
import { Task } from './task.entity';

// 체크리스트 카테고리(탭) — AI 추천 4개 영역과 동일
export const CHECKLIST_CATEGORIES = ['필수', '관리', '보안', '부가'] as const;
export type ChecklistCategory = (typeof CHECKLIST_CATEGORIES)[number];

// 작업자 진행 상태(자가보고) — 지시자의 검토(done/reviewNote)와는 별개.
// 작업자가 항목별로 직접 설정하며, 중간 점검 보고 시 스냅샷으로 기록된다.
export const CHECKLIST_WORK_STATUSES = ['todo', 'doing', 'done'] as const;
export type ChecklistWorkStatus = (typeof CHECKLIST_WORK_STATUSES)[number];

// 업무 체크리스트 항목
@Entity('checklist_items')
export class ChecklistItem {
  @PrimaryGeneratedColumn('uuid')
  id!: string;

  // 소속 업무 (업무 삭제 시 함께 삭제)
  // Relation<> 래퍼: 엔티티 순환참조 회피
  @ManyToOne(() => Task, (task) => task.checklist, { onDelete: 'CASCADE' })
  task!: Relation<Task>;

  // 항목 내용
  @Column()
  text!: string;

  // 카테고리(탭) — 필수/관리/보안/부가
  @Column({ type: 'varchar', default: '필수' })
  category!: ChecklistCategory;

  // 완료 여부(지시자 검토 = 승인). 보완거절은 done:false + reviewNote 로 표현
  @Column({ default: false })
  done!: boolean;

  // 작업자 진행 상태(자가보고) — 미착수/진행중/완료. 검토(done)와 독립
  @Column({ name: 'work_status', type: 'varchar', default: 'todo' })
  workStatus!: ChecklistWorkStatus;

  // 보완 내용(수정 요청 시 항목별로 입력) — 완료 처리 시 비워짐
  @Column({ name: 'review_note', type: 'text', nullable: true })
  reviewNote!: string | null;

  // 표시 순서(생성 순)
  @Column({ name: 'sort_order', type: 'int', default: 0 })
  sortOrder!: number;

  @CreateDateColumn({ name: 'created_at' })
  createdAt!: Date;
}
