package com.dora.util;

import lombok.extern.slf4j.Slf4j;

/**
 * 课程权限工具类
 * 统一管理课程权限相关的逻辑，确保所有接口的权限信息一致
 */
@Slf4j
public class CoursePermissionUtil {
    
    /**
     * 根据课程级别获取VIP类型
     * 统一的权限等级映射逻辑
     * 
     * @param level 课程级别 (0=游客, 1=普通用户, 2=VIP, 3=SVIP)
     * @return VIP类型字符串
     */
    public static String getVipType(Integer level) {
        if (level == null || level == 0) {
            return "free";      // 免费内容
        } else if (level == 1) {
            return "normal";    // 普通用户
        } else if (level == 2) {
            return "vip";       // VIP用户
        } else {
            return "svip";      // SVIP用户
        }
    }
    
    /**
     * 根据级别获取角色名称
     * 
     * @param level 级别
     * @return 角色名称
     */
    public static String getRoleNameByLevel(Integer level) {
        if (level == null || level == 0) {
            return "游客";
        } else if (level == 1) {
            return "普通用户";
        } else if (level == 2) {
            return "VIP";
        } else {
            return "SVIP";
        }
    }
    
    /**
     * 检查用户是否有权限访问指定级别的课程
     * 
     * @param userLevel 用户级别
     * @param courseLevel 课程要求级别
     * @return 是否有权限
     */
    public static boolean hasPermission(Integer userLevel, Integer courseLevel) {
        if (userLevel == null) userLevel = 0;
        if (courseLevel == null) courseLevel = 0;
        return userLevel >= courseLevel;
    }
    
    /**
     * 获取权限拒绝的原因
     * 
     * @param userLevel 用户级别
     * @param courseLevel 课程要求级别
     * @return 拒绝原因
     */
    public static String getAccessDeniedReason(Integer userLevel, Integer courseLevel) {
        if (userLevel == null) {
            return "请先登录，该课程需要" + getRoleNameByLevel(courseLevel) + "及以上权限";
        }
        
        if (userLevel < courseLevel) {
            return "您当前是" + getRoleNameByLevel(userLevel) + "用户，该课程需要" + getRoleNameByLevel(courseLevel) + "及以上权限";
        }
        
        return null;
    }
    
    /**
     * 验证课程权限配置的一致性
     * 用于调试和测试
     * 
     * @param level 课程级别
     * @param isFree 是否免费
     * @param vipType VIP类型
     * @return 是否一致
     */
    public static boolean validatePermissionConsistency(Integer level, Boolean isFree, String vipType) {
        String expectedVipType = getVipType(level);
        boolean isConsistent = expectedVipType.equals(vipType);
        
        if (!isConsistent) {
            log.warn("权限配置不一致: level={}, isFree={}, vipType={}, expected={}", 
                    level, isFree, vipType, expectedVipType);
        }
        
        return isConsistent;
    }
}
