import { BullModule } from '@nestjs/bullmq';
import { Module } from '@nestjs/common';
import { AiConfigModule } from '../ai-dashboard/ai-config/ai-config.module';
import { AyudaIaModule } from '../ayuda-ia/ayuda-ia.module';
import { PrismaModule } from '../prisma/prisma.module';
import { TwilioModule } from '../twilio/twilio.module';
import { CAMPANAS_QUEUE, CampanasService } from './campanas/campanas.service';
import { CampanasController } from './campanas/campanas.controller';
import { CampanasProcessor } from './campanas/campanas.processor';
import { CarteraDashboardController } from './dashboard/dashboard.controller';
import { CarteraDashboardService } from './dashboard/dashboard.service';
import { DashboardExportService } from './dashboard/dashboard-export.service';
import { ApiKeyGuard } from './api-publica/api-key.guard';
import { ApiKeysController } from './api-publica/api-keys.controller';
import { ApiKeysService } from './api-publica/api-keys.service';
import { ApiPublicaController } from './api-publica/api-publica.controller';
import { ApiPublicaService } from './api-publica/api-publica.service';
import { ClientesCarteraController } from './clientes/clientes-cartera.controller';
import { ClientesCarteraService } from './clientes/clientes-cartera.service';
import { CarteraConfigController } from './config/cartera-config.controller';
import { CarteraConfigService } from './config/cartera-config.service';
import { CarteraImportadaFuente } from './fuentes/cartera-importada-fuente.service';
import { ErpNovasisFuente } from './fuentes/erp-novasis-fuente.service';
import { GestionesCarteraController } from './gestiones/gestiones.controller';
import { GestionesCarteraService } from './gestiones/gestiones.service';
import { CarteraIaController } from './ia/cartera-ia.controller';
import { CarteraIaService } from './ia/cartera-ia.service';
import { CarteraInsightsController } from './ia/cartera-insights.controller';
import { CarteraRecomendacionesCron } from './ia/cartera-recomendaciones.cron';
import { ImportadorController } from './importador/importador.controller';
import { ImportadorService } from './importador/importador.service';
import { MiDiaController } from './mi-dia/mi-dia.controller';
import { MiDiaService } from './mi-dia/mi-dia.service';
import { WebhookController } from './webhooks/webhook.controller';
import { WebhookProcessor } from './webhooks/webhook.processor';
import { WEBHOOK_QUEUE, WebhookService } from './webhooks/webhook.service';
import { WorklistController } from './worklist/worklist.controller';
import { WorklistService } from './worklist/worklist.service';

/**
 * Módulo Cartera Inteligente.
 *
 * Slice 0: config operativa.
 * Slice 2A: worklist + detalle de cuenta vía ErpNovasisFuente.
 * Slice 2B: importación de cartera externa vía Excel (CarteraImportadaFuente).
 * Slice 2C: gestiones desde worklist (dispatch por fuente).
 * Slice 2D: detalle de cliente con timeline unificado.
 * Slice 2E: webhooks salientes con HMAC + retry exponencial.
 *
 * Roadmap completo: `docs/plan-cobranzas-roadmap-2026-h2.md`.
 */
@Module({
  imports: [
    PrismaModule,
    BullModule.registerQueue({ name: WEBHOOK_QUEUE }, { name: CAMPANAS_QUEUE }),
    AyudaIaModule, // AyudaProviderService (abstrae los LLM providers)
    AiConfigModule, // AiConfigService (config IA por empresa)
    TwilioModule, // SMS / WhatsApp para campañas
  ],
  controllers: [
    CarteraConfigController,
    WorklistController,
    ImportadorController,
    GestionesCarteraController,
    ClientesCarteraController,
    WebhookController,
    MiDiaController,
    CarteraIaController,
    CarteraInsightsController,
    CampanasController,
    CarteraDashboardController,
    ApiKeysController,
    ApiPublicaController,
  ],
  providers: [
    CarteraConfigService,
    ErpNovasisFuente,
    CarteraImportadaFuente,
    WorklistService,
    ImportadorService,
    GestionesCarteraService,
    ClientesCarteraService,
    WebhookService,
    WebhookProcessor,
    MiDiaService,
    CarteraIaService,
    CarteraRecomendacionesCron,
    CampanasService,
    CampanasProcessor,
    CarteraDashboardService,
    DashboardExportService,
    ApiKeysService,
    ApiKeyGuard,
    ApiPublicaService,
  ],
  exports: [
    CarteraConfigService,
    ErpNovasisFuente,
    CarteraImportadaFuente,
    WorklistService,
    WebhookService,
  ],
})
export class CarteraModule {}
