import { ApiPropertyOptional } from '@nestjs/swagger';
import { IsDateString, IsNumber, IsOptional, IsString, IsUUID, Max, MaxLength, Min } from 'class-validator';

/**
 * Todo es opcional: lo que no se envía sale de la oportunidad o de la
 * configuración de presupuestos (M36). La idea del ticket es que generar el
 * presupuesto sea un click, no volver a tipear la cotización.
 */
export class GenerarPresupuestoDto {
  @ApiPropertyOptional({ description: 'Por defecto, el título de la oportunidad', example: 'Equipamiento planta 2' })
  @IsString()
  @MaxLength(200)
  @IsOptional()
  titulo?: string;

  @ApiPropertyOptional({ description: 'Persona a quien va dirigido', example: 'Ing. Pérez' })
  @IsString()
  @MaxLength(200)
  @IsOptional()
  contacto_cliente?: string;

  @ApiPropertyOptional({ description: 'Si no se envía, la calcula M36 con sus días de vigencia', example: '2026-11-30' })
  @IsDateString()
  @IsOptional()
  fecha_vigencia?: string;

  @ApiPropertyOptional({ description: 'Condición de pago del catálogo (condiciones_pago)' })
  @IsUUID()
  @IsOptional()
  condicion_pago_id?: string;

  @ApiPropertyOptional({ description: 'Notas visibles para el cliente', example: 'Entrega en 5 días hábiles.' })
  @IsString()
  @IsOptional()
  notas_cliente?: string;

  @ApiPropertyOptional({ description: 'Descuento global del presupuesto (0–100%)', example: 5 })
  @IsNumber({ maxDecimalPlaces: 2 })
  @Min(0)
  @Max(100)
  @IsOptional()
  descuento_global_pct?: number;

  @ApiPropertyOptional({ description: 'Tipo de cambio congelado si la moneda no es PYG', example: 7400 })
  @IsNumber({ maxDecimalPlaces: 4 })
  @Min(0)
  @IsOptional()
  tipo_cambio_usd?: number;
}
