import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AuthModule } from 'src/auth/auth.module';
import { ClientesModule } from 'src/clientes/clientes.module';
import { CobranzasModule } from 'src/cobranzas/cobranzas.module';
import { CobrosModule } from 'src/cobros/cobros.module';
import { MonedasModule } from 'src/monedas/monedas.module';
import { RendicionesModule } from 'src/rendiciones/rendiciones.module';
import { TesoreriaModule } from 'src/tesoreria/tesoreria.module';
import { VendedoresCobradoresModule } from 'src/vendedores-cobradores/vendedores-cobradores.module';
import { MobileAuthController } from './auth/mobile-auth.controller';
import { MobileCajaController } from './caja/mobile-caja.controller';
import { MobileCajaService } from './caja/mobile-caja.service';
import { MobileClientesController } from './clientes/mobile-clientes.controller';
import { MobileClientesService } from './clientes/mobile-clientes.service';
import { MobileCobrosController } from './cobros/mobile-cobros.controller';
import { MobileCobrosService } from './cobros/mobile-cobros.service';
import { IdempotencyCleanupService } from './common/idempotency-cleanup.service';
import { IdempotencyStoreService } from './common/idempotency-store.service';
import { IdempotencyInterceptor } from './common/idempotency.interceptor';
import { MobileDashboardController } from './dashboard/mobile-dashboard.controller';
import { MobileDashboardService } from './dashboard/mobile-dashboard.service';
import { MobileReportesController } from './reportes/mobile-reportes.controller';
import { MobileReportesService } from './reportes/mobile-reportes.service';
import { MobileRendicionesController } from './rendiciones/mobile-rendiciones.controller';
import { MobileRendicionesService } from './rendiciones/mobile-rendiciones.service';
import { MobileGestionesController } from './gestiones/mobile-gestiones.controller';
import { MobileGestionesService } from './gestiones/mobile-gestiones.service';
import { AlertasClienteService } from './gestiones/alertas-cliente.service';
import { PrismaModule } from 'src/prisma/prisma.module';
import { MobileSistemaController } from './sistema/mobile-sistema.controller';

/**
 * Módulo de la app móvil (Novasis Cobros). Es una capa delgada de presentación:
 * reutiliza por DI los services de dominio existentes (auth, cobros, clientes,
 * caja/tesorería, rendiciones, monedas) y solo agrega DTOs pensados para móvil
 * más idempotencia de POSTs vía `Idempotency-Key`.
 */
@Module({
  imports: [
    ConfigModule,
    AuthModule,
    CobrosModule,
    CobranzasModule,
    ClientesModule,
    TesoreriaModule,
    RendicionesModule,
    VendedoresCobradoresModule,
    MonedasModule,
    PrismaModule,
  ],
  controllers: [
    MobileAuthController,
    MobileDashboardController,
    MobileClientesController,
    MobileCobrosController,
    MobileCajaController,
    MobileReportesController,
    MobileSistemaController,
    MobileRendicionesController,
    MobileGestionesController,
  ],
  providers: [
    IdempotencyStoreService,
    IdempotencyInterceptor,
    IdempotencyCleanupService,
    MobileDashboardService,
    MobileClientesService,
    MobileCobrosService,
    MobileCajaService,
    MobileReportesService,
    MobileRendicionesService,
    MobileGestionesService,
    AlertasClienteService,
  ],
})
export class MobileV1Module {}
