import { AsyncLocalStorage } from 'node:async_hooks';

/**
 * 请求级租户上下文(AsyncLocalStorage)。
 *
 * 在 tenant-scope.interceptor 里随每个鉴权请求设置;Prisma 扩展(tenant-guard.extension)
 * 读它对 scoped 模型的读查询**自动注入 tenantId**(纵深防御:手写 where 漏了也兜得住)。
 *
 * **系统任务**(cold-import / 重算 CLI / scheduler)不经过 interceptor → 无上下文 →
 * 扩展不注入(它们本就需要跨 scope 全量跑)。
 */
export interface TenantContext {
  hostId: string;
  tenantId: string;
  sourceUnits: string[];
}

export const tenantAls = new AsyncLocalStorage<TenantContext>();

/** 取当前请求的租户上下文;无(系统任务 / 未鉴权)→ undefined。 */
export function currentTenant(): TenantContext | undefined {
  return tenantAls.getStore();
}
