// =============================================================================
// 认证过期回调注册中心
// =============================================================================
// 解决 api/index.ts ↔ stores/employee.ts 循环依赖问题。
//
// 依赖链：stores/employee.ts → api/employee.ts → api/index.ts
// 如果 api/index.ts 再 import stores/employee.ts，就形成循环依赖。
//
// 方案：将回调注册逻辑提取为独立模块（无任何依赖），
//   - stores/employee.ts 启动时调用 registerAuthExpiredHandler() 注册处理器
//   - api/index.ts 触发 401 时调用 triggerAuthExpired() 调用已注册的处理器
// =============================================================================

/** 回调函数类型 */
type AuthExpiredHandler = () => Promise<void>

/** 已注册的处理器（初始为 null，store 初始化后赋值） */
let _handler: AuthExpiredHandler | null = null

/**
 * 注册认证过期处理器
 * 由 stores/employee.ts 在 store 初始化时调用，将 handleUnauthorized 注册为回调。
 *
 * @param handler 认证过期时执行的处理函数
 */
export function registerAuthExpiredHandler(handler: AuthExpiredHandler): void {
  _handler = handler
}

/**
 * 触发认证过期处理
 * 由 api/index.ts 在收到 401/1002 时调用，委托给已注册的处理器。
 * 如果尚未注册（模块加载顺序异常），返回 false 让调用方做降级处理。
 *
 * @returns true 表示已成功触发处理，false 表示处理器未注册
 */
export async function triggerAuthExpired(): Promise<boolean> {
  if (_handler) {
    await _handler()
    return true
  }
  return false
}
