// IamClient 接口 + DI token（B8 裁决：DownstreamClient 抽象）
// 接口定义所有 P2+ 需要的 iam RPC，实现分 gRPC + mock 两种
// 选择策略：TEACHER_BFF_DEV_MODE=true → mock，false → gRPC（未就绪 RPC 降级 mock + warning）
import type { CallContext } from "../types.js";
import type {
  UserInfo,
  ViewportItem,
  EffectivePermissions,
} from "./iam.types.js";

/** IamClient DI token（NestJS 注入用） */
export const IAM_CLIENT = Symbol("IAM_CLIENT");

/** IamClient 接口（所有 BFF 统一依赖此接口，不依赖具体实现） */
export interface IamClient {
  /** 获取用户信息（iam.proto GetUserInfo，✅ 已就绪） */
  getUserInfo(ctx: CallContext): Promise<UserInfo>;

  /** 获取教师导航菜单（iam.proto GetViewports，❌ 待 coord 补全） */
  getViewports(ctx: CallContext): Promise<ViewportItem[]>;

  /** 获取有效权限集（iam.proto GetEffectivePermissions，❌ 待 coord 补全） */
  getEffectivePermissions(ctx: CallContext): Promise<EffectivePermissions>;

  /** 健康检查（/readyz 探针用） */
  checkHealth(): Promise<{
    serving: boolean;
    latencyMs: number;
    error?: string;
  }>;
}
