import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsISO8601, IsInt, IsNumber, IsOptional, IsString, IsUUID, Length, Max, Min } from 'class-validator';

export class ChangeEmpresaPlanDto {
  @ApiProperty({ example: 'cd88ac6a-2b0e-41bc-afd9-24b594cb8daf' })
  @IsUUID('all', { message: 'Plan debe ser un UUID válido' })
  plan_id: string;

  @ApiPropertyOptional({ example: 'Upgrade a plan Pro' })
  @IsOptional()
  @IsString()
  @Length(3, 60, { message: 'Motivo debe tener entre 3 y 60 caracteres' })
  motivo?: string;

  @ApiPropertyOptional({ example: '2025-12-19' })
  @IsOptional()
  @IsISO8601({}, { message: 'fecha_inicio debe tener formato ISO8601' })
  fecha_inicio?: string;

  @ApiPropertyOptional({ example: '2026-01-19' })
  @IsOptional()
  @IsISO8601({}, { message: 'fecha_fin debe tener formato ISO8601' })
  fecha_fin?: string;

  @ApiPropertyOptional({ example: 500000 })
  @IsOptional()
  @IsNumber({}, { message: 'costo_mensual debe ser numérico' })
  @Min(0, { message: 'costo_mensual no puede ser negativo' })
  costo_mensual?: number;

  @ApiPropertyOptional({ example: 15, description: 'Día del mes para el cobro recurrente (1-31)' })
  @IsOptional()
  @IsInt({ message: 'dia_cobro debe ser entero' })
  @Min(1, { message: 'dia_cobro debe ser >= 1' })
  @Max(31, { message: 'dia_cobro debe ser <= 31' })
  dia_cobro?: number;
}
