import {
  ArrayMaxSize,
  IsArray,
  IsIn,
  IsOptional,
  IsString,
  IsUUID,
  MaxLength,
  ValidateNested,
} from 'class-validator';
import { Type } from 'class-transformer';
import { ApiProperty } from '@nestjs/swagger';
import {
  CHECKLIST_WORK_STATUSES,
  type ChecklistWorkStatus,
} from '../entities/checklist-item.entity';

// 보고서 항목 — 항목별 진행 상태
export class CheckpointReportItemInput {
  @ApiProperty({ description: '체크리스트 항목 ID' })
  @IsUUID('4')
  id!: string;

  @ApiProperty({ description: '진행 상태', enum: CHECKLIST_WORK_STATUSES })
  @IsIn(CHECKLIST_WORK_STATUSES)
  workStatus!: ChecklistWorkStatus;
}

// 중간 점검 보고 — 점검일 당일에 작업자가 항목별 상태 + 메모를 보고서로 제출
export class CheckpointReportDto {
  @ApiProperty({ description: '보고 메모(선택)', required: false })
  @IsOptional()
  @IsString()
  @MaxLength(2000, { message: '메모가 너무 깁니다.' })
  note?: string;

  @ApiProperty({
    description: '항목별 진행 상태',
    type: [CheckpointReportItemInput],
  })
  @IsArray()
  @ArrayMaxSize(100, { message: '항목이 너무 많습니다.' })
  @ValidateNested({ each: true })
  @Type(() => CheckpointReportItemInput)
  items!: CheckpointReportItemInput[];
}
