import { Injectable, NestMiddleware } from "@nestjs/common";
import { NextFunction, Request, Response } from "express";
import { TenantContextStorage } from "./tenant-context.storage";

// Abre el AsyncLocalStorage ANTES de que corra ningun guard — ver el
// comentario largo en tenant-context.storage.ts sobre por que esto no puede
// vivir en un Guard. Registrado globalmente en TenancyModule.configure().
@Injectable()
export class TenancyMiddleware implements NestMiddleware {
  constructor(private readonly tenantContext: TenantContextStorage) {}

  use(_req: Request, _res: Response, next: NextFunction) {
    this.tenantContext.runEmpty(() => next());
  }
}
