import { IsBoolean, IsIn, IsNumber, IsOptional, IsString, Min } from 'class-validator';

export class UpsertAiConfigDto {
  @IsString()
  @IsIn(['anthropic', 'openai', 'deepseek', 'gemini', 'ollama'])
  proveedor: string;

  @IsString()
  modelo: string;

  @IsOptional()
  @IsString()
  api_key?: string;

  @IsOptional()
  @IsBoolean()
  activo?: boolean;

  @IsOptional()
  @IsBoolean()
  recalculo_automatico?: boolean;

  // Acepta tanto cron_expression (frontend) como frecuencia_cron (legacy)
  @IsOptional()
  @IsString()
  cron_expression?: string;

  @IsOptional()
  @IsString()
  frecuencia_cron?: string;

  @IsOptional()
  @IsNumber()
  @Min(0)
  max_tokens?: number;

  // Umbral tasa de mora (%)
  @IsOptional()
  @IsNumber()
  @Min(0)
  umbral_mora_pct?: number;

  // Compatibilidad con nombre legacy
  @IsOptional()
  @IsNumber()
  @Min(0)
  umbral_alerta_mora?: number;

  @IsOptional()
  @IsNumber()
  @Min(0)
  umbral_saldo_critico?: number;

  @IsOptional()
  @IsNumber()
  @Min(0)
  umbral_dias_sin_pagar?: number;

  @IsOptional()
  @IsNumber()
  @Min(0)
  umbral_stock_bajo?: number;

  @IsOptional()
  @IsNumber()
  @Min(0)
  umbral_venta_alta?: number;

  // Tope mensual de tokens de IA (0 = ilimitado).
  @IsOptional()
  @IsNumber()
  @Min(0)
  limite_tokens_mensual?: number;

  // Modo de credencial: PROPIA (key de la empresa) | PLATAFORMA (key del holding).
  @IsOptional()
  @IsIn(['PROPIA', 'PLATAFORMA'])
  credencial_modo?: string;
}
