import { useAppSelector } from '@/hooks/redux'; import { selectUserProfile } from '@/store/userSlice'; import { useCallback } from 'react'; /** * 增值服务检查结果 */ export interface VipServiceResult { /** 是否可以使用服务 */ canUseService: boolean; /** 是否是 VIP 用户 */ isVip: boolean; /** 剩余免费使用次数 */ remainingFreeUsage: number; /** 最大免费使用次数 */ maxFreeUsage: number; /** 是否需要显示会员付费弹窗 */ shouldShowMembershipModal: boolean; } /** * VIP 增值服务 Hook * 用于检查用户是否可以使用增值服务 */ export function useVipService() { const userProfile = useAppSelector(selectUserProfile); /** * 检查用户是否可以使用增值服务 * @returns 检查结果 */ const checkServiceAccess = useCallback((): VipServiceResult => { const isVip = userProfile?.isVip ?? false; const freeUsageCount = userProfile?.freeUsageCount ?? 0; const maxUsageCount = userProfile?.maxUsageCount ?? 5; console.log('userProfile', userProfile); // VIP 用户可以使用所有服务 if (isVip) { return { canUseService: true, isVip: true, remainingFreeUsage: 0, // VIP 用户不关心免费次数 maxFreeUsage: 0, shouldShowMembershipModal: false, }; } // 计算剩余免费使用次数 const canUseService = freeUsageCount > 0; return { canUseService, isVip: false, remainingFreeUsage: freeUsageCount, maxFreeUsage: maxUsageCount, shouldShowMembershipModal: !canUseService, }; }, [userProfile]); /** * 检查并处理服务访问 * @param onAllowed 当允许使用时的回调函数 * @param onBlocked 当阻止使用时的回调函数(可选) * @returns 是否可以继续使用服务 */ const handleServiceAccess = useCallback(( onAllowed: () => void, onBlocked?: () => void ): boolean => { const result = checkServiceAccess(); if (result.canUseService) { onAllowed(); return true; } else { onBlocked?.(); return false; } }, [checkServiceAccess]); return { checkServiceAccess, handleServiceAccess, isVip: userProfile?.isVip ?? false, freeUsageCount: userProfile?.freeUsageCount ?? 0, maxUsageCount: userProfile?.maxUsageCount ?? 5, }; }