import { Module } from '@nestjs/common';
import { AlertasEmpresaModule } from 'src/alertas-empresa/alertas-empresa.module';
import { ClientesModule } from 'src/clientes/clientes.module';
import { PedidosModule } from 'src/pedidos/pedidos.module';
import { PresupuestosModule } from 'src/presupuestos/presupuestos.module';
import { PersonasModule } from 'src/personas/personas.module';
import { ListaPreciosModule } from 'src/lista-precios/lista-precios.module';
import { NumeracionCrmService } from './common/numeracion-crm.service';
import { CierreVentaController } from './cierre/cierre-venta.controller';
import { CierreVentaService } from './cierre/cierre-venta.service';
import { OverrideCreditoService } from './cierre/override-credito.service';
import { CrmConfigController } from './config/crm-config.controller';
import { CrmConfigService } from './config/crm-config.service';
import { CrmPruebaController } from './prueba/crm-prueba.controller';
import { CrmPruebaCron } from './prueba/crm-prueba.cron';
import { CrmPruebaService } from './prueba/crm-prueba.service';
import { ActividadesController } from './actividades/actividades.controller';
import { ActividadesService } from './actividades/actividades.service';
import { EstancamientoCron } from './actividades/estancamiento.cron';
import { LeadsController } from './leads/leads.controller';
import { LeadsImportController } from './leads/importacion/leads-import.controller';
import { ReportesCrmController } from './reportes/reportes-crm.controller';
import { ReportesCrmService } from './reportes/reportes-crm.service';
import { CanalesController } from './canales/canales.controller';
import { CanalesService } from './canales/canales.service';
import { MensajeriaService } from './canales/mensajeria.service';
import { CrmWebhooksController } from './canales/webhooks.controller';
import { WhatsAppProviderFactory } from './canales/whatsapp/whatsapp-provider.factory';
import { CatalogosController } from './catalogos/catalogos.controller';
import { CatalogosService } from './catalogos/catalogos.service';
import { FechasEspecialesController } from './fechas/fechas-especiales.controller';
import { FechasEspecialesService } from './fechas/fechas-especiales.service';
import { FechasCron } from './fechas/fechas.cron';
import { LeadsImportService } from './leads/importacion/leads-import.service';
import { LeadsService } from './leads/leads.service';
import { OportunidadesController } from './oportunidades/oportunidades.controller';
import { TimelineController } from './timeline/timeline.controller';
import { TimelineService } from './timeline/timeline.service';
import { OportunidadesService } from './oportunidades/oportunidades.service';
import { PresupuestoOportunidadController } from './presupuesto/presupuesto-oportunidad.controller';
import { PresupuestoOportunidadService } from './presupuesto/presupuesto-oportunidad.service';
import { CrmSyncModule } from './sync/crm-sync.module';
import { CrmSeedService } from './seeds/crm-seed.service';

/**
 * CRM 360. Ver src/crm/CLAUDE.md, docs/spec-crm-360.md y docs/plan-crm-360.md.
 *
 * Fase 0: sólo configuración (M90). Los submódulos de leads, oportunidades,
 * bandeja, tickets y contratos se van sumando acá a medida que avanzan las fases.
 */
@Module({
  imports: [AlertasEmpresaModule, ClientesModule, ListaPreciosModule, PedidosModule, PresupuestosModule, PersonasModule, CrmSyncModule],
  controllers: [
    CrmConfigController,
    CrmPruebaController,
    LeadsController,
    OportunidadesController,
    ActividadesController,
    TimelineController,
    CierreVentaController,
    PresupuestoOportunidadController,
    LeadsImportController,
    FechasEspecialesController,
    CatalogosController,
    CanalesController,
    CrmWebhooksController,
    ReportesCrmController,
  ],
  providers: [
    CrmConfigService,
    CrmPruebaService,
    CrmPruebaCron,
    NumeracionCrmService,
    CrmSeedService,
    LeadsService,
    OportunidadesService,
    ActividadesService,
    EstancamientoCron,
    TimelineService,
    CierreVentaService,
    OverrideCreditoService,
    PresupuestoOportunidadService,
    LeadsImportService,
    FechasEspecialesService,
    FechasCron,
    CatalogosService,
    CanalesService,
    MensajeriaService,
    WhatsAppProviderFactory,
    ReportesCrmService,
  ],
  exports: [
    CrmConfigService,
    CrmPruebaService,
    NumeracionCrmService,
    CrmSeedService,
    LeadsService,
    OportunidadesService,
    ActividadesService,
    EstancamientoCron,
    CanalesService,
    MensajeriaService,
  ],
})
export class CrmModule {}
