import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsBoolean, IsIn, IsNumber, IsOptional, IsString, Max, Min } from 'class-validator';

export class UpsertConfigMoraDto {
  @ApiProperty({ default: false })
  @IsBoolean()
  activo: boolean;

  @ApiProperty({ enum: ['diario', 'mensual', 'fijo_por_cuota'], default: 'diario' })
  @IsIn(['diario', 'mensual', 'fijo_por_cuota'])
  tipo_calculo: string;

  @ApiProperty({ description: '% diario/mensual o monto fijo según tipo_calculo', default: 0 })
  @IsNumber()
  @Min(0)
  tasa: number;

  @ApiProperty({ enum: ['capital', 'cuota_completa'], default: 'capital' })
  @IsIn(['capital', 'cuota_completa'])
  base_calculo: string;

  @ApiProperty({ description: 'Días de gracia post-vencimiento', default: 0 })
  @IsNumber()
  @Min(0)
  @Max(365)
  periodo_gracia: number;

  @ApiProperty({ description: 'Mora mínima a aplicar (0 = sin mínimo)', default: 0 })
  @IsNumber()
  @Min(0)
  monto_minimo_mora: number;

  @ApiPropertyOptional({ description: 'Mora máxima/cap (null = sin tope)' })
  @IsOptional()
  @IsNumber()
  @Min(0)
  monto_maximo_mora?: number | null;

  @ApiProperty({ default: 'Interés por mora' })
  @IsString()
  descripcion_concepto: string;
}
