import { Module } from '@nestjs/common';
import { BullModule } from '@nestjs/bullmq';
import { ContabilidadModule } from '../contabilidad/contabilidad.module';
import { MailModule } from '../mail/mail.module';
import { PrismaModule } from '../prisma/prisma.module';
import { AcreditacionesBancariasController } from './controllers/acreditaciones-bancarias.controller';
import { AnticiposController } from './controllers/anticipos.controller';
import { CatalogosController } from './controllers/catalogos.controller';
import { ConceptosController } from './controllers/conceptos.controller';
import { DesvinculacionesController } from './controllers/desvinculaciones.controller';
import { EmpleadosController } from './controllers/empleados.controller';
import { FormatosBancariosController } from './controllers/formatos-bancarios.controller';
import { LiquidacionesController } from './controllers/liquidaciones.controller';
import { MarcacionesController } from './controllers/marcaciones.controller';
import { NovedadesController } from './controllers/novedades.controller';
import { PermisosPresentismoController } from './controllers/permisos-presentismo.controller';
import { ParametrosController } from './controllers/parametros.controller';
import { PlanillasController } from './controllers/planillas.controller';
import { PresentismoNovedadesController } from './controllers/presentismo-novedades.controller';
import { PrestamosController } from './controllers/prestamos.controller';
import { ReportesIpsController } from './controllers/reportes-ips.controller';
import { RelojesMarcadoresController } from './controllers/relojes-marcadores.controller';
import { RrhhSeedController } from './controllers/seed.controller';
import { ToleranciasPresentismoController } from './controllers/tolerancias-presentismo.controller';
import { TurnosController } from './controllers/turnos.controller';
import { VacacionesController } from './controllers/vacaciones.controller';
import { RrhhEngineService } from './engine/rrhh-engine.service';
import { PresentismoEngineService } from './engine/presentismo-engine.service';
import { AcreditacionesBancariasService } from './services/acreditaciones-bancarias.service';
import { AnticiposService } from './services/anticipos.service';
import { CatalogosService } from './services/catalogos.service';
import { ConceptosService } from './services/conceptos.service';
import { DesvinculacionesService } from './services/desvinculaciones.service';
import { EmpleadosService } from './services/empleados.service';
import { FormatosBancariosService } from './services/formatos-bancarios.service';
import { LiquidacionesService } from './services/liquidaciones.service';
import { MarcacionesService } from './services/marcaciones.service';
import { MarcacionesDedupService } from './services/marcaciones-dedup.service';
import { MarcacionesParserService } from './services/marcaciones-parser.service';
import { NovedadesService } from './services/novedades.service';
import { PermisosPresentismoService } from './services/permisos-presentismo.service';
import { ParametrosService } from './services/parametros.service';
import { PlanillasService } from './services/planillas.service';
import { PrestamosService } from './services/prestamos.service';
import { RelojApiClientService } from './services/reloj-api-client.service';
import { HikvisionIsapiClientService } from './services/hikvision-isapi-client.service';
import { PresentismoSyncProcessor } from './services/presentismo-sync.processor';
import { PresentismoSyncSchedulerService } from './services/presentismo-sync-scheduler.service';
import { PresentismoReconciliacionCron } from './presentismo-reconciliacion.cron';
import { RelojesMarcadoresService } from './services/relojes-marcadores.service';
import { ReportesIpsService } from './services/reportes-ips.service';
import { RrhhSeedService } from './services/seed.service';
import { ToleranciasPresentismoService } from './services/tolerancias-presentismo.service';
import { TurnosService } from './services/turnos.service';
import { TurnosResolverService } from './services/turnos-resolver.service';
import { VacacionesService } from './services/vacaciones.service';
import { LegajosStorageService } from './services/legajos-storage.service';
import { LegajosMimeValidator } from './services/legajos-mime.validator';
import { LegajosTiposService } from './services/legajos-tipos.service';
import { LegajosDocumentosService } from './services/legajos-documentos.service';
import { LegajosCompletitudService } from './services/legajos-completitud.service';
import { LegajosDashboardService } from './services/legajos-dashboard.service';
import { LegajosVencimientoJobService } from './services/legajos-vencimiento-job.service';
import { LegajosVencimientoProcessor } from './services/legajos-vencimiento.processor';
import { LegajosVencimientoSchedulerService } from './services/legajos-vencimiento-scheduler.service';
import { LegajosTiposController } from './controllers/legajos-tipos.controller';
import { LegajosDocumentosController } from './controllers/legajos-documentos.controller';
import { LegajosDashboardController } from './controllers/legajos-dashboard.controller';
import { LegajosConsultaController } from './controllers/legajos-consulta.controller';
import { LegajosConsultaService } from './services/legajos-consulta.service';
import { RrhhComisionesController } from './comisiones/rrhh-comisiones.controller';
import { RrhhComisionesService } from './comisiones/rrhh-comisiones.service';

@Module({
  imports: [
    PrismaModule,
    ContabilidadModule,
    MailModule,
    BullModule.registerQueue({
      name: 'rrhh-presentismo-queue',
    }),
    BullModule.registerQueue({
      name: 'rrhh-legajos-queue',
    }),
  ],
  controllers: [
    EmpleadosController,
    CatalogosController,
    ConceptosController,
    ParametrosController,
    AnticiposController,
    PrestamosController,
    VacacionesController,
    NovedadesController,
    PlanillasController,
    LiquidacionesController,
    ReportesIpsController,
    DesvinculacionesController,
    FormatosBancariosController,
    AcreditacionesBancariasController,
    RrhhSeedController,
    // Presentismo (M16-M22)
    RelojesMarcadoresController,
    TurnosController,
    MarcacionesController,
    PermisosPresentismoController,
    ToleranciasPresentismoController,
    PresentismoNovedadesController,
    // Legajos Digitales (M23-M26)
    LegajosTiposController,
    LegajosDocumentosController,
    LegajosDashboardController,
    LegajosConsultaController,
    RrhhComisionesController,
  ],
  providers: [
    EmpleadosService,
    CatalogosService,
    ConceptosService,
    ParametrosService,
    AnticiposService,
    PrestamosService,
    VacacionesService,
    NovedadesService,
    PlanillasService,
    RrhhEngineService,
    PresentismoEngineService,
    LiquidacionesService,
    ReportesIpsService,
    DesvinculacionesService,
    FormatosBancariosService,
    AcreditacionesBancariasService,
    RrhhComisionesService,
    RrhhSeedService,
    // Presentismo (M16-M22)
    RelojesMarcadoresService,
    TurnosService,
    MarcacionesParserService,
    MarcacionesDedupService,
    RelojApiClientService,
    HikvisionIsapiClientService,
    MarcacionesService,
    PresentismoSyncSchedulerService,
    PresentismoSyncProcessor,
    PresentismoReconciliacionCron,
    TurnosResolverService,
    PermisosPresentismoService,
    ToleranciasPresentismoService,
    // Legajos Digitales (M23-M26)
    LegajosStorageService,
    LegajosMimeValidator,
    LegajosTiposService,
    LegajosDocumentosService,
    LegajosCompletitudService,
    LegajosDashboardService,
    LegajosConsultaService,
    LegajosVencimientoJobService,
    LegajosVencimientoProcessor,
    LegajosVencimientoSchedulerService,
  ],
  exports: [
    EmpleadosService,
    CatalogosService,
    ConceptosService,
    ParametrosService,
    AnticiposService,
    PrestamosService,
    VacacionesService,
    NovedadesService,
    PlanillasService,
    RrhhEngineService,
    PresentismoEngineService,
    LiquidacionesService,
    ReportesIpsService,
    DesvinculacionesService,
    FormatosBancariosService,
    AcreditacionesBancariasService,
    RrhhComisionesService,
    RrhhSeedService,
    // Presentismo (M16-M22)
    RelojesMarcadoresService,
    TurnosService,
    MarcacionesParserService,
    MarcacionesDedupService,
    RelojApiClientService,
    MarcacionesService,
    PresentismoSyncSchedulerService,
    TurnosResolverService,
    PermisosPresentismoService,
    ToleranciasPresentismoService,
    // Legajos Digitales (M23-M26)
    LegajosStorageService,
    LegajosMimeValidator,
    LegajosTiposService,
    LegajosDocumentosService,
    LegajosCompletitudService,
    LegajosDashboardService,
    LegajosConsultaService,
    LegajosVencimientoJobService,
    LegajosVencimientoProcessor,
    LegajosVencimientoSchedulerService,
  ],
})
export class RrhhModule {}
