import { Transform, Type } from 'class-transformer';
import {
  ArrayUnique,
  IsArray,
  IsDateString,
  IsIn,
  IsInt,
  IsNotEmpty,
  IsOptional,
  IsString,
  MaxLength,
  Min,
} from 'class-validator';

export function normalizePlenaryStatus(value: unknown) {
  if (typeof value !== 'string') return value;

  const normalized = value.trim().toLowerCase();

  if (normalized === 'draft') return 'DRAFT';
  if (normalized === 'sent') return 'SENT';

  return value;
}

export class CreatePlenaryDto {
  @IsString()
  @IsNotEmpty()
  @MaxLength(255)
  name!: string;

  @IsDateString()
  meetingDate!: string;

  @IsOptional()
  @IsDateString()
  deadline?: string;

  @IsOptional()
  @IsString()
  @MaxLength(255)
  documentReference?: string;

  @IsOptional()
  @Transform(({ value }: { value: unknown }) => normalizePlenaryStatus(value))
  @IsIn(['DRAFT', 'SENT'])
  status?: string;

  @IsOptional()
  @IsArray()
  @ArrayUnique()
  @Type(() => Number)
  @IsInt({ each: true })
  @Min(1, { each: true })
  ministryIds?: number[];
}
