import { Module } from '@nestjs/common';
import { AlertasEmpresaModule } from 'src/alertas-empresa/alertas-empresa.module';
import { FacturasModule } from 'src/facturas/facturas.module';
import { MonedasModule } from 'src/monedas/monedas.module';
import { PersonasModule } from 'src/personas/personas.module';
import { AdendasInmController } from './adendas/adendas.controller';
import { AdendasInmService } from './adendas/adendas.service';
import { CarteraInmCron } from './cartera/cartera.cron';
import { ComisionesInmController } from './comisiones/comisiones.controller';
import { ComisionesInmService } from './comisiones/comisiones.service';
import { CumplimientoInmController } from './cumplimiento/cumplimiento.controller';
import { InmStorageService } from './cumplimiento/inm-storage.service';
import { InusualesInmService } from './cumplimiento/inusuales.service';
import { LegajosClienteInmService } from './cumplimiento/legajos-cliente.service';
import { FideicomisoInmCron } from './fideicomiso/fideicomiso.cron';
import { FideicomisoInmService } from './fideicomiso/fideicomiso.service';
import { InversoresInmController } from './inversores/inversores.controller';
import { InversoresInmService } from './inversores/inversores.service';
import { CertificadosObraInmService } from './obra/certificados-obra.service';
import { CostosObraInmService } from './obra/costos-obra.service';
import { ObraInmController } from './obra/obra.controller';
import { PresupuestoObraInmService } from './obra/presupuesto-obra.service';
import { PostventaInmController } from './postventa/postventa.controller';
import { PostventaInmService } from './postventa/postventa.service';
import { CarteraInmService } from './cartera/cartera.service';
import { CobranzaInmController } from './cobros/cobros.controller';
import { CobrosInmService } from './cobros/cobros.service';
import { NumeracionInmService } from './common/numeracion-inm.service';
import { ConfigInmController } from './config/config-inm.controller';
import { IndicesInmService } from './config/indices.service';
import { ParametrosInmService } from './config/parametros.service';
import { CotizacionesInmController } from './cotizaciones/cotizaciones.controller';
import { CotizacionesInmService } from './cotizaciones/cotizaciones.service';
import { OperacionesInmController } from './operaciones/operaciones.controller';
import { OperacionesInmService } from './operaciones/operaciones.service';
import { PlanesPagoInmController } from './planes/planes.controller';
import { PlanesPagoInmService } from './planes/planes.service';
import { ProyectosInmController } from './proyectos/proyectos.controller';
import { ProyectosInmService } from './proyectos/proyectos.service';
import { UnidadesInmController } from './unidades/unidades.controller';
import { UnidadesInmService } from './unidades/unidades.service';

/**
 * Vertical inmobiliario (M110–M124). Ver src/inmobiliario/CLAUDE.md.
 * F0: parámetros, índices, proyectos, etapas, hitos, numeración.
 * F1: unidades, planes de pago, cotizaciones, operaciones (reserva → boleto),
 *     cobro de cuotas con factura, cartera y avisos diarios.
 * F2 (sin CRM): adendas, escrituración, entrega con observaciones y comisiones.
 * F4 (dentro del módulo): presupuesto de obra por partidas, certificados de
 *     contratistas, imputación de compras y gastos, costo por unidad.
 * F5: cumplimiento SEPRELAD (legajo del cliente, inusuales), inversores y
 *     informe de fideicomiso.
 */
@Module({
  imports: [FacturasModule, AlertasEmpresaModule, PersonasModule, MonedasModule],
  controllers: [
    ConfigInmController,
    ProyectosInmController,
    UnidadesInmController,
    PlanesPagoInmController,
    CotizacionesInmController,
    OperacionesInmController,
    CobranzaInmController,
    AdendasInmController,
    PostventaInmController,
    ComisionesInmController,
    ObraInmController,
    CumplimientoInmController,
    InversoresInmController,
  ],
  providers: [
    ParametrosInmService,
    IndicesInmService,
    ProyectosInmService,
    NumeracionInmService,
    UnidadesInmService,
    PlanesPagoInmService,
    CotizacionesInmService,
    OperacionesInmService,
    CobrosInmService,
    CarteraInmService,
    CarteraInmCron,
    AdendasInmService,
    PostventaInmService,
    ComisionesInmService,
    PresupuestoObraInmService,
    CertificadosObraInmService,
    CostosObraInmService,
    InmStorageService,
    InusualesInmService,
    LegajosClienteInmService,
    InversoresInmService,
    FideicomisoInmService,
    FideicomisoInmCron,
  ],
  exports: [ParametrosInmService, IndicesInmService, ProyectosInmService, NumeracionInmService],
})
export class InmobiliarioModule {}
