package com.jy.framework.satoken;

import cn.hutool.core.util.ObjectUtil;
import com.jy.framework.model.constants.CommonConstant;
import com.jy.framework.model.constants.DataScopeConstant;

import java.util.Set;

/**
 * 登录上下文
 */
public class LoginContext {

    private static final ThreadLocal<UserInfo> loginUserThreadLocal = new ThreadLocal<>();

    public static void create(UserInfo userInfo) {
        loginUserThreadLocal.set(userInfo);
    }

    public static void remove() {
        loginUserThreadLocal.remove();
    }

    /**
     * 获取用户信息
     **/
    public static UserInfo getLoginUser() {
        return loginUserThreadLocal.get();
    }

    /**
     * 获取用户id
     **/
    public static Long getUserId() {
        return getLoginUser().getUserId();
    }

    /**
     * 验证用户是否为超级管理员
     */
    public static boolean isSupperAdmin() {
        return ObjectUtil.equal(CommonConstant.SUPER_ADMIN_USER_ID, getUserId());
    }

    /**
     * 验证用户是否为超级管理员
     */
    public static boolean isNotSupperAdmin() {
        return ObjectUtil.notEqual(CommonConstant.SUPER_ADMIN_USER_ID, getUserId());
    }

    /**
     * 是否拥有全部数据访问权限
     */
    public static boolean isAllDataSource() {
        return isSupperAdmin() || getDataPermissionSet().contains(DataScopeConstant.FULL);
    }

    /**
     * 获取部门id
     **/
    public static Long getDeptId() {
        return getLoginUser().getDeptId();
    }

    /**
     * 获取账号
     **/
    public static String getUsername() {
        return getLoginUser().getUsername();
    }

    /**
     * 获取昵称
     **/
    public static String getNickname() {
        return getLoginUser().getNickname();
    }

    /**
     * 获取头像地址
     **/
    public static String getAvatar() {
        return getLoginUser().getAvatar();
    }

    /**
     * 获取角色id集合
     */
    public static Set<Long> getRoleIdSet() {
        return getLoginUser().getRoleIdSet();
    }

    /**
     * 获取角色编码集合
     */
    public static Set<String> getRoleCodeSet() {
        return getLoginUser().getRoleCodeSet();
    }

    /**
     * 获取用户数据访问权限
     */
    public static Set<Integer> getDataPermissionSet() {
        return getLoginUser().getDataPermissionSet();
    }

    /**
     * 获取部门数据访问权限
     */
    public static Set<Long> getDeptPermissionSet() {
        return getLoginUser().getDeptPermissionSet();
    }

    /**
     * 获取用户接口访问权限
     **/
    public static Set<String> getApiPermissionSet() {
        return getLoginUser().getApiPermissionSet();
    }

}
