import { ProgressReportMinistryStatus } from '@/generated/prisma/client';
import { Transform } from 'class-transformer';
import {
  IsBoolean,
  IsEnum,
  IsInt,
  IsOptional,
  IsString,
  Max,
  Min,
} from 'class-validator';

function toOptionalNumber(value: unknown): unknown {
  if (value === '' || value === null || value === undefined) return undefined;
  return Number(value);
}

function toOptionalText(value: unknown): unknown {
  if (typeof value !== 'string') return value;
  return value.trim() || undefined;
}

function toOptionalBoolean(value: unknown): unknown {
  if (value === '' || value === null || value === undefined) return undefined;
  if (value === true || value === 'true') return true;
  if (value === false || value === 'false') return false;
  return value;
}

export class QueryProgressReportMinistriesDto {
  @Transform(({ value }) => toOptionalNumber(value))
  @IsOptional()
  @IsInt()
  @Min(1)
  page?: number = 1;

  @Transform(({ value }) => toOptionalNumber(value))
  @IsOptional()
  @IsInt()
  @Min(1)
  @Max(100)
  limit?: number = 10;

  @Transform(({ value }) => toOptionalText(value))
  @IsOptional()
  @IsString()
  search?: string;

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

  @Transform(({ value }) => toOptionalBoolean(value))
  @IsOptional()
  @IsBoolean()
  submittedToCdc?: boolean;
}
