import {
  IsString,
  IsDateString,
  IsOptional,
  IsEnum,
  IsInt,
  IsArray,
  IsEmail,
  ValidateNested,
  ArrayMinSize,
  IsNotEmpty,
} from 'class-validator';
import { Type } from 'class-transformer';
import { ScheduleStatus } from '../entities/audit-schedule.entity';
import {
  AuditType,
  AuditMode,
} from '../entities/audit-schedule-row.entity';

export class CreateAuditRowDto {
  @IsEnum(AuditType)
  audit_type: AuditType;

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

  @IsOptional()
  @IsEnum(AuditMode)
  audit_mode?: AuditMode;

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

  @IsInt()
  company_id: number;

  @IsInt()
  lead_auditor_id: number;
  @IsOptional()
  @IsArray()
  @IsInt({ each: true })
  @Type(() => Number)
  co_auditor_ids?: number[];

  @IsArray()
  @ArrayMinSize(1)
  @IsInt({ each: true })
  standard_ids: number[];

  @IsOptional()
  @IsString()
  audit_time?: string; // 'HH:MM' or 'HH:MM:SS'

  @IsOptional()
  @IsString()
  audit_time_label?: string; // '11.00AM'

  @IsOptional()
  @IsString()
  notes?: string;
}

export class CreateAuditScheduleDto {
  @IsDateString()
  schedule_date: string; // YYYY-MM-DD

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

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

  @IsInt()
  coordinator_id: number;

  @IsOptional()
  @IsEmail()
  source_email?: string;

  @IsOptional()
  @IsEnum(ScheduleStatus)
  status?: ScheduleStatus;

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

  @IsArray()
  @ArrayMinSize(1)
  @ValidateNested({ each: true })
  @Type(() => CreateAuditRowDto)
  rows: CreateAuditRowDto[];
}
