import { ApiPropertyOptional } from '@nestjs/swagger';
import { presupuesto_estado } from '@prisma/client';
import { Type } from 'class-transformer';
import { IsDateString, IsEnum, IsInt, IsNumber, IsOptional, IsString, IsUUID, Max, Min } from 'class-validator';

export class QueryPresupuestosDto {
  @ApiPropertyOptional({ example: 1 })
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @IsOptional()
  page?: number;

  @ApiPropertyOptional({ example: 10 })
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @Max(100)
  @IsOptional()
  limit?: number;

  @ApiPropertyOptional({ description: 'Búsqueda por número o título' })
  @IsString()
  @IsOptional()
  q?: string;

  @ApiPropertyOptional({ enum: presupuesto_estado })
  @IsEnum(presupuesto_estado)
  @IsOptional()
  estado?: presupuesto_estado;

  @ApiPropertyOptional({ description: 'Filtrar por cliente' })
  @IsUUID()
  @IsOptional()
  cliente_id?: string;

  @ApiPropertyOptional({ description: 'Filtrar por vendedor' })
  @IsUUID()
  @IsOptional()
  vendedor_id?: string;

  @ApiPropertyOptional({ example: '2026-05-01' })
  @IsDateString()
  @IsOptional()
  fecha_desde?: string;

  @ApiPropertyOptional({ example: '2026-05-31' })
  @IsDateString()
  @IsOptional()
  fecha_hasta?: string;

  @ApiPropertyOptional({ description: 'Monto mínimo (total)' })
  @Type(() => Number)
  @IsNumber()
  @IsOptional()
  monto_min?: number;

  @ApiPropertyOptional({ description: 'Monto máximo (total)' })
  @Type(() => Number)
  @IsNumber()
  @IsOptional()
  monto_max?: number;
}
