import { Transform, Type } from 'class-transformer';
import {
  IsArray,
  IsBoolean,
  IsDateString,
  IsInt,
  IsOptional,
  IsString,
  IsUrl,
  MaxLength,
  Min,
  MinLength,
} from 'class-validator';

function emptyStringToUndefined({ value }: { value: unknown }): unknown {
  if (typeof value !== 'string') {
    return value;
  }

  const trimmed = value.trim();

  return trimmed.length > 0 ? trimmed : undefined;
}

export class CreateCdcRgcDecisionDto {
  @IsInt()
  @Min(1)
  plenaryId!: number;

  @IsInt()
  @Min(1)
  stakeholderId!: number;

  @IsInt()
  @Min(1)
  categoryId!: number;

  @IsOptional()
  @IsInt()
  @Min(1)
  indicatorId?: number;

  @IsOptional()
  @Transform(emptyStringToUndefined)
  @IsString()
  @MaxLength(255)
  category?: string;

  @IsDateString()
  meetingDate!: string;

  @IsOptional()
  @Transform(emptyStringToUndefined)
  @IsString()
  @MaxLength(50)
  status?: string;

  @IsOptional()
  @Transform(emptyStringToUndefined)
  @IsString()
  @MaxLength(255)
  focalPerson?: string;

  @IsString()
  @MinLength(1)
  decision!: string;

  @IsOptional()
  @Transform(emptyStringToUndefined)
  @IsString()
  verificationSource?: string;

  @IsOptional()
  @Transform(emptyStringToUndefined)
  @IsUrl(
    {
      require_protocol: true,
      protocols: ['http', 'https'],
    },
    { message: 'verificationLink must be a valid HTTP or HTTPS URL' },
  )
  verificationLink?: string;

  @IsOptional()
  @IsBoolean()
  saveAsDraft?: boolean;

  // 🔥 បន្ថែម Field issueIds សម្រាប់ CDC Form
  @IsOptional()
  @IsArray()
  @Type(() => Number)
  @IsInt({ each: true })
  issueIds?: number[];
}
