import {RouterInfo} from "./user";

export * from './config';
export * from './user';

/**
 * 统一登录SDK接口
 */
export interface UnifiedLoginSDK {
  /**
   * 初始化SDK配置
   * @param config SDK配置选项
   */
  init(config: import('./config').SDKConfig): void;

  getToken():string|null
  /**
   * 触发登录流程
   * @param redirectUri 可选的重定向URL，覆盖初始化时的配置
   */
  login(redirectUri?: string): Promise<void>;

  /**
   * 退出登录
   */
  logout(): Promise<void>;

  /**
   * 处理授权回调
   * @returns Promise<UserInfo> 用户信息
   */
  handleCallback(): Promise<void>;
  getRoutes(): Promise<import('./user').RouterInfo>;

  /**
   * 获取用户信息
   * @returns Promise<UserInfo> 用户信息
   */
  getUserInfo(): import('./user').UserInfo;

  /**
   * 检查用户是否已认证
   * @returns boolean 是否已认证
   */
  isAuthenticated(): boolean;

  /**
   * 检查用户是否有指定角色
   * @param role 角色编码或角色编码列表
   * @returns Promise<boolean> 是否有指定角色
   */
  hasRole(role: string | string[]): Promise<boolean>;

  /**
   * 检查用户是否有所有指定角色
   * @param roles 角色编码列表
   * @returns Promise<boolean> 是否有所有指定角色
   */
  hasAllRoles(roles: string[]): Promise<boolean>;

  /**
   * 检查用户是否有指定权限
   * @param permission 权限标识或权限标识列表
   * @returns Promise<boolean> 是否有指定权限
   */
  hasPermission(permission: string | string[]): Promise<boolean>;

  /**
   * 检查用户是否有所有指定权限
   * @param permissions 权限标识列表
   * @returns Promise<boolean> 是否有所有指定权限
   */
  hasAllPermissions(permissions: string[]): Promise<boolean>;

  /**
   * 事件监听
   * @param event 事件类型
   * @param callback 回调函数
   */
  on(event: import('./config').EventType, callback: Function): void;

  /**
   * 移除事件监听
   * @param event 事件类型
   * @param callback 回调函数
   */
  off(event: import('./config').EventType, callback: Function): void;

  /**
   * 检查当前URL是否为授权回调
   * @returns boolean 是否为授权回调
   */
  isCallback(): boolean;
}
