import { Module } from '@nestjs/common';
import { PrismaModule } from 'src/prisma/prisma.module';
import { PedidosModule } from 'src/pedidos/pedidos.module';
import { SeguridadModule } from 'src/seguridad/seguridad.module';
import { EcommerceAdminController } from './admin/ecommerce-admin.controller';
import { EcommerceAdminService } from './admin/ecommerce-admin.service';
import { EcommercePublicController } from './public/ecommerce-public.controller';
import { EcommercePublicService } from './public/ecommerce-public.service';
import { EcommercePedidosController } from './pedidos/ecommerce-pedidos.controller';
import { EcommercePedidosService } from './pedidos/ecommerce-pedidos.service';
import { EcommerceNovedadesController } from './novedades/ecommerce-novedades.controller';
import { EcommerceNovedadesService } from './novedades/ecommerce-novedades.service';
import { EcommerceNotificationsModule } from './notifications/ecommerce-notifications.module';
import { EcommerceStockReservaService } from './stock/ecommerce-stock-reserva.service';
import { EcommerceStockReservaCron } from './stock/ecommerce-stock-reserva.cron';

@Module({
  imports: [PrismaModule, PedidosModule, EcommerceNotificationsModule, SeguridadModule],
  controllers: [
    EcommerceAdminController,
    EcommercePublicController,
    EcommercePedidosController,
    EcommerceNovedadesController,
  ],
  providers: [
    EcommerceAdminService,
    EcommercePublicService,
    EcommercePedidosService,
    EcommerceNovedadesService,
    EcommerceStockReservaService,
    EcommerceStockReservaCron,
  ],
  // EcommercePedidosService se exporta para que el gateway de pagos (webhook de
  // Novasis Pay y sync lazy de la tienda) confirme el pago por la MISMA vía que
  // el operador: crear pedido ERP + reservar stock.
  // EcommerceStockReservaService lo usa la tienda (store-public) para reservar
  // en el checkout (Fase 7.5).
  exports: [
    EcommerceNovedadesService,
    EcommercePedidosService,
    EcommerceStockReservaService,
    EcommerceNotificationsModule,
  ],
})
export class EcommerceModule {}
