package com.ruoyi.cms.util;

import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginSiteUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.SiteSecurityUtils;

/**
 * 判断是否企业用户
 */
public class RoleUtils {

    /**
     * 验证用户角色是否是企业用户
     * @return
     */
    public static boolean isCompanyAdmin() {
        // 先判断用户是否登录
        if (!SecurityUtils.isLogin()) {
            return false;
        }
        // 获取当前登录用户的角色列表，判断是否包含企业管理员角色ID
        LoginUser loginUser = SecurityUtils.getLoginUser();
        return loginUser.getUser().getRoles().stream()
                .anyMatch(role -> StringUtil.COMPANY_ADMIN_ROLE_KEY.equals(role.getRoleId()));
    }

    /**
     * 获取身份证或统一信用代码
     * @return
     */
    public static String getCurrentUseridCard() {
        LoginUser loginUser = SecurityUtils.getLoginUser(); // 已包含登录校验
        SysUser sysUser = loginUser.getUser();
        if (sysUser == null) {
            throw new IllegalArgumentException("用户信息为空，无法获取身份证号");
        }
        return sysUser.getIdCard();
    }

    /**
     * 获取App用户身份证或统一信用代码
     * @return
     */
    public static String getAppCurrentUseridCard(){
        if (!SiteSecurityUtils.isLogin()) {
            return null;
        }

        LoginSiteUser loginSiteUser = SiteSecurityUtils.getLoginUser();
        AppUser appUser = loginSiteUser.getUser();
        if (appUser == null) {
            throw new IllegalArgumentException("用户信息为空，无法获取身份证号"); // 用户信息为空仍抛异常，避免空指针
        }

        if ("0".equals(appUser.getIsCompanyUser())) {
            return appUser.getIdCard();
        } else {
            return null;
        }
    }

    /**
     * 获取用户角色
     * @return
     */
    public static String getAppIscompanyUser(){
        LoginSiteUser loginSiteUser = SiteSecurityUtils.getLoginUser();
        AppUser appUser = loginSiteUser.getUser();
        if (appUser == null) {
            throw new IllegalArgumentException("用户信息为空，无法获取身份证号"); // 用户信息为空仍抛异常，避免空指针
        }
        return appUser.getIsCompanyUser();
    }
}