import { Module } from "@nestjs/common";
import { Test } from "@nestjs/testing";
import { TenancyModule } from "../tenancy/tenancy.module";

import { CatalogosModule } from "../catalogos/catalogos.module";
import { CotizacionesModule } from "../cotizaciones/cotizaciones.module";
import { HistorialModule } from "../historial/historial.module";
import { MecanicosModule } from "../mecanicos/mecanicos.module";
import { OtsModule } from "../ots/ots.module";
import { ReportesModule } from "../reportes/reportes.module";
import { SyncModule } from "../sync/sync.module";
import { TallerParametrosService } from "./taller-parametros.service";
import { RequiereFlagGuard } from "./requiere-flag.guard";
import { TallerParametrosModule } from "./taller-parametros.module";
import { WhatsappModule } from "../whatsapp/whatsapp.module";

// Sustituye al TenancyModule real (necesita la base del plano de control): lo
// que se verifica aqui es solo el cableado de modulos, y el mocker de abajo
// nunca cubre TallerParametrosService, asi que un import olvidado SI falla.
@Module({})
class TenancyFalso {}

describe("DI de los modulos con RequiereFlagGuard", () => {
  it.each([
    ["Historial", HistorialModule],
    ["Reportes", ReportesModule],
    ["Mecanicos", MecanicosModule],
    ["Catalogos", CatalogosModule],
    ["Ots", OtsModule],
    ["Cotizaciones", CotizacionesModule],
    ["Whatsapp", WhatsappModule],
    ["Sync", SyncModule],
    ["TallerParametros", TallerParametrosModule],
  ])("%s resuelve TallerParametrosService y RequiereFlagGuard", async (_n, modulo) => {
    const moduleRef = await Test.createTestingModule({ imports: [modulo as any] })
      .overrideModule(TenancyModule)
      .useModule(TenancyFalso)
      .useMocker((token) => {
        if (token === TallerParametrosService || token === RequiereFlagGuard) {
          throw new Error(`NO RESUELTO: ${(token as any).name}`);
        }
        return {};
      })
      .compile();
    await moduleRef.close();
  });
});
