import Anthropic from '@anthropic-ai/sdk';
import { Injectable, Logger } from '@nestjs/common';
import { envs } from 'src/config/envs';

/**
 * Un solo cliente del SDK para todo el servicio (el backend del ERP crea uno por
 * llamada). Sin API key el servicio queda en modo degradado: `disponible = false`.
 */
@Injectable()
export class AnthropicService {
  private readonly logger = new Logger(AnthropicService.name);
  readonly client: Anthropic | null;

  constructor() {
    this.client = envs.anthropicApiKey ? new Anthropic({ apiKey: envs.anthropicApiKey, maxRetries: 2 }) : null;
    if (!this.client) {
      this.logger.warn('ANTHROPIC_API_KEY no configurada: el agente responde en modo degradado.');
    }
  }

  get disponible(): boolean {
    return this.client !== null;
  }
}

/**
 * Fallback del lado del servidor ante un rechazo de seguridad: el API reintenta
 * con el modelo que corresponda a la categoría, dentro de la misma llamada.
 */
export const FALLBACK = {
  betas: ['server-side-fallback-2026-07-01'] as Anthropic.Beta.AnthropicBeta[],
  fallbacks: 'default' as const,
};
