// ═══════════════════════════════════════════════════════════════════════
// CreateNcDto — validates POST /api/nc
// File: backend/src/nc/dto/create-nc.dto.ts
// ═══════════════════════════════════════════════════════════════════════

import {
  IsArray,
  IsEnum,
  IsInt,
  IsOptional,
  IsString,
  ValidateNested,
  ArrayMinSize,
} from 'class-validator';
import { Type } from 'class-transformer';

class CreateNcFindingDto {
  @IsOptional()
  @IsString()
  nc_type?: string;

  @IsString()
  ncr_statement!: string;

  @IsOptional()
  @IsString()
  criteria_clause?: string;

  @IsOptional()
  @IsString()
  corrective_action?: string;

  @IsOptional()
  @IsEnum(['open', 'closed', 'pending'])
  status?: 'open' | 'closed' | 'pending';
}

export class CreateNcDto {
  @IsInt()
  audit_id!: number;

  @IsOptional()
  @IsInt()
  company_id?: number | null;

  @IsOptional()
  @IsString()
  auditee_name?: string | null;

  @IsOptional()
  @IsString()
  audit_type?: string | null;

  @IsString()
  nc_type!: string;

  @IsOptional()
  @IsEnum(['open', 'closed'])
  status?: 'open' | 'closed';

  @IsOptional()
  @IsString()
  follow_up_date?: string | null;

  @IsOptional()
  @IsString()
  due_date?: string | null;

  @IsOptional()
  @IsString()
  follow_up_notes?: string | null;

  @IsOptional()
  @IsString()
  remark?: string | null;

  @IsArray()
  @ArrayMinSize(1)
  @ValidateNested({ each: true })
  @Type(() => CreateNcFindingDto)
  findings!: CreateNcFindingDto[];
}
