import { Type } from 'class-transformer';
import { IsIn, IsInt, IsOptional, IsString, Max, Min } from 'class-validator';

const STATUSES = [
  'pendiente',
  'procesando',
  'aprobado',
  'rechazado',
  'expirado',
  'cancelado',
] as const;

export type NovasisPayCobroStatusFilter = (typeof STATUSES)[number];

export class ListarNovasisPayCobrosDto {
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @Max(100)
  limit?: number;

  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  page?: number;

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

  /** Búsqueda por referencia, descripción o datos del comprador (nombre/email/doc). */
  @IsOptional()
  @IsString()
  search?: string;

  @IsOptional()
  @IsIn(STATUSES, { message: `status debe ser uno de: ${STATUSES.join(', ')}` })
  status?: NovasisPayCobroStatusFilter;
}
