import { BadRequestException, Injectable } from '@nestjs/common';
import { EvolutionProvider } from './evolution.provider';
import { MetaCloudProvider } from './meta-cloud.provider';
import { type IWhatsAppProvider, type ProveedorWhatsApp } from './whatsapp-provider.interface';

/**
 * Resuelve el conector a partir de `crm_canales.proveedor`.
 *
 * Los dos modos de Evolution comparten implementación y se diferencian por el
 * `tipo`, que es lo que después consulta la regla D4 para bloquear automáticos.
 */
@Injectable()
export class WhatsAppProviderFactory {
  private readonly meta = new MetaCloudProvider();
  private readonly evolutionCloud = new EvolutionProvider('evolution_cloud');
  private readonly evolutionBaileys = new EvolutionProvider('evolution_baileys');

  para(proveedor: ProveedorWhatsApp): IWhatsAppProvider {
    switch (proveedor) {
      case 'meta_cloud':
        return this.meta;
      case 'evolution_cloud':
        return this.evolutionCloud;
      case 'evolution_baileys':
        return this.evolutionBaileys;
      default:
        // Un proveedor de email o webchat no tiene conector de WhatsApp: es un
        // error de programación, no del usuario, pero el mensaje lo nombra.
        throw new BadRequestException(`"${String(proveedor)}" no es un proveedor de WhatsApp`);
    }
  }
}
