import type { AuthContextType } from '@d8d/shared-types';

/**
 * 认证上下文类型定义
 * 扩展共享类型中的基础定义
 */
export type { AuthContextType };

/**
 * 认证状态枚举
 */
export enum AuthStatus {
  IDLE = 'idle',
  LOADING = 'loading',
  AUTHENTICATED = 'authenticated',
  UNAUTHENTICATED = 'unauthenticated',
  ERROR = 'error'
}

/**
 * 认证配置选项
 */
export interface AuthConfig {
  /**
   * 登录成功后重定向的路径
   */
  redirectPath?: string;
  /**
   * 是否启用自动刷新token
   */
  enableAutoRefresh?: boolean;
  /**
   * token过期时间（分钟）
   */
  tokenExpiryMinutes?: number;
  /**
   * 是否在localStorage中存储token
   */
  persistToken?: boolean;
}

/**
 * 认证事件类型
 */
export type AuthEvent =
  | { type: 'LOGIN_START' }
  | { type: 'LOGIN_SUCCESS'; payload: { user: any; token: string } }
  | { type: 'LOGIN_FAILURE'; payload: { error: string } }
  | { type: 'LOGOUT' }
  | { type: 'TOKEN_REFRESH' }
  | { type: 'AUTH_CHECK_START' }
  | { type: 'AUTH_CHECK_SUCCESS'; payload: { user: any } }
  | { type: 'AUTH_CHECK_FAILURE' };

/**
 * 认证钩子返回类型
 */
export interface UseAuthReturn<T = any> {
  /**
   * 当前用户信息
   */
  user: T | null;
  /**
   * 认证token
   */
  token: string | null;
  /**
   * 是否已认证
   */
  isAuthenticated: boolean;
  /**
   * 是否正在加载
   */
  isLoading: boolean;
  /**
   * 登录方法
   */
  login: (username: string, password: string) => Promise<void>;
  /**
   * 登出方法
   */
  logout: () => Promise<void>;
  /**
   * 错误信息
   */
  error: string | null;
  /**
   * 清除错误
   */
  clearError: () => void;
}