import {
  ArrayMaxSize,
  IsArray,
  IsBoolean,
  IsOptional,
  IsString,
  IsUUID,
  MaxLength,
  ValidateNested,
} from 'class-validator';
import { Type } from 'class-transformer';
import { ApiProperty } from '@nestjs/swagger';

// 승인 요청(담당자 → 지시자) — 메시지 선택
export class ApprovalRequestDto {
  @ApiProperty({
    description: '승인 요청 메시지(선택)',
    required: false,
    example: '가로형/세로형 1차 제작을 완료했습니다. 검토 부탁드립니다.',
  })
  @IsOptional()
  @IsString()
  @MaxLength(2000)
  note?: string;
}

// 수정 요청 시 항목별 완료 검토 결과(지시자가 체크/X 표시 + 항목별 보완 내용)
export class ChecklistReviewDto {
  @ApiProperty({ description: '체크리스트 항목 ID' })
  @IsUUID('4')
  id!: string;

  @ApiProperty({ description: '완료 여부 — true=완성(체크) / false=미완성(X)' })
  @IsBoolean()
  done!: boolean;

  @ApiProperty({
    description:
      '항목별 보완 내용(미완성 항목에만 적용). 생략 시 보완 내용 없음',
    required: false,
  })
  @IsOptional()
  @IsString()
  @MaxLength(2000)
  note?: string;
}

// 수정 요청(지시자 → 담당자) — 보완 메시지(선택) + 항목별 완료 체크(선택)
export class ApprovalChangesDto {
  @ApiProperty({
    description: '수정 요청 메시지(선택)',
    required: false,
    example: '세로형 카피 가독성이 낮으니 자간과 대비를 조정해 주세요.',
  })
  @IsOptional()
  @IsString()
  @MaxLength(2000)
  note?: string;

  @ApiProperty({
    description: '항목별 완료 검토 결과(체크/X). 생략 시 체크리스트 변경 없음',
    type: [ChecklistReviewDto],
    required: false,
  })
  @IsOptional()
  @IsArray()
  @ArrayMaxSize(100, { message: '체크리스트 항목이 너무 많습니다.' })
  @ValidateNested({ each: true })
  @Type(() => ChecklistReviewDto)
  checklist?: ChecklistReviewDto[];
}
