import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import {
  ArrayMaxSize,
  IsArray,
  IsNumber,
  IsOptional,
  IsUUID,
  Min,
  ValidateNested,
} from 'class-validator';
import { Type } from 'class-transformer';

export class ItemAplicableDto {
  @ApiProperty({ description: 'ID del producto' })
  @IsUUID()
  productoId: string;

  @ApiProperty({ description: 'Precio de catálogo (contado) del producto en el carrito' })
  @IsNumber()
  @Min(0)
  precioContado: number;
}

export class ObtenerPlanesAplicablesDto {
  @ApiProperty({ type: [ItemAplicableDto], description: 'Ítems del carrito actual' })
  @IsArray()
  @ArrayMaxSize(200)
  @ValidateNested({ each: true })
  @Type(() => ItemAplicableDto)
  items: ItemAplicableDto[];

  @ApiPropertyOptional({
    description:
      'Monto total a financiar del carrito. Si viene, se excluyen los planes cuyo ' +
      'monto_minimo/monto_maximo no lo admiten — así el selector no ofrece un plan que ' +
      'después va a fallar al calcular las cuotas. Si se omite, no se filtra por monto ' +
      '(retrocompatible).',
  })
  @IsOptional()
  @IsNumber()
  @Min(0)
  montoTotal?: number;
}
