import {
  IsString,
  IsNotEmpty,
  IsOptional,
  IsArray,
  ArrayNotEmpty,
  IsNumber,
  IsIn,
  IsObject, // ✅ NEW
} from 'class-validator';
import { Type } from 'class-transformer';

export class CreateCertificateDto {
  @IsNotEmpty()
  company_id: number;

  @IsOptional()
  standard_id?: number;

  // ❌ REMOVED — template_id
  // @IsNotEmpty()
  // template_id: number;

  // ✅ NEW — cert type (required)
  @IsNotEmpty()
  @IsString()
  @IsIn(['INITIAL', 'SURVEILLANCE', 'RECERTIFICATION'])
  cert_type: string;

  // ✅ NEW — optional link to previous cert
  @IsOptional()
  @IsNumber()
  previous_certificate_id?: number;

  @IsString()
  city: string;

  @IsString()
  country: string;

  @IsString()
  scope_of_work: string;

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

  @IsString()
  ea_codes: string;

  @IsOptional()
  @Type(() => Date)
  originally_registered?: Date;

  @IsOptional()
  @Type(() => Date)
  issue_date?: Date;

  @IsOptional()
  @Type(() => Date)
  expire_date?: Date;

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

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

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

  // ❌ REMOVED — status (backend controls this, always starts as pending_scan)
  // @IsOptional()
  // @IsString()
  // status?: string;

  @IsOptional()
  @Type(() => Date)
  surveillance_audit_due?: Date;

  @IsOptional()
  @Type(() => Date)
  recertification_due?: Date;

  @IsOptional()
  @IsArray()
  @ArrayNotEmpty()
  @IsNumber({}, { each: true })
  standard_ids?: number[];

  // ✅ NEW — manual cert numbers per standard
  // Used for SURVEILLANCE / RECERTIFICATION when the legacy lookup
  // doesn't find a previous cert and the user types it in manually.
  // Shape: { [standard_id]: "UAE-22-001-12345" }
  @IsOptional()
  @IsObject()
  manual_cert_numbers?: Record<number, string>;
}