/**
 * 用户相关钩子
 * 作者: 阿瑞
 * 功能: 提供用户状态管理的自定义钩子函数
 * 版本: 1.0.0
 */

import { useCallback, useMemo } from 'react';
import { 
  useUserStore, 
  useUserInfo, 
  useUserActions, 
  useIsAuthenticated,
  useAccessToken
} from '@/store/userStore';
import type { IFrontendUser } from '@/store/userStore';

/**
 * 检查当前用户是否具有特定角色
 * @returns 检查角色的函数
 */
export function useHasRole() {
  const userInfo = useUserInfo();
  
  return useCallback((roleType: string): boolean => {
    if (!userInfo || !userInfo.roleType) return false;
    return userInfo.roleType === roleType;
  }, [userInfo]);
}

/**
 * 检查当前用户是否是管理员
 * @returns 用户是否为管理员
 */
export function useIsAdmin() {
  const userInfo = useUserInfo();
  
  return useMemo(() => {
    if (!userInfo || !userInfo.roleType) return false;
    // 假设管理员角色类型为 'admin'
    return userInfo.roleType === 'admin';
  }, [userInfo]);
}

/**
 * 获取用户完整信息的钩子
 * @returns 用户个人信息，包括用户名、邮箱、角色、电话和ID
 */
export function useUserProfile() {
  const userInfo = useUserInfo();
  
  return useMemo(() => {
    return {
      userId: userInfo?.id || 0,
      username: userInfo?.username || '',
      email: userInfo?.email || '',
      roleName: userInfo?.roleName || '',
      phone: userInfo?.phone || '',
    };
  }, [userInfo]);
}

/**
 * 用户登录状态钩子
 * @returns 用户登录状态及相关操作
 */
export function useAuth() {
  const isAuthenticated = useIsAuthenticated();
  const accessToken = useAccessToken();
  const { logout, setUserToken, setUserInfo } = useUserActions();
  
  const login = useCallback(async (token: string, user: IFrontendUser) => {
    setUserToken(token);
    setUserInfo(user);
  }, [setUserToken, setUserInfo]);
  
  return {
    isAuthenticated,
    accessToken,
    login,
    logout
  };
}

/**
 * 导出所有基础钩子以便重用
 */
export {
  useUserInfo,
  useUserActions,
  useIsAuthenticated,
  useAccessToken
};

export default useUserStore; 