package com.ruoyi.common.utils.ex;

import com.ruoyi.common.config.RoleConstants;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * 当前登录用户工具类
 * 
 * v1.0
 */
public class CurLoginUserUtil {
	/**
	 * 是否管理员
	 * 
	 * v1.0 zhanghc 2023年9月15日上午10:41:30
	 * @return boolean
	 */
	public static boolean isAdmin() {
		return SecurityUtils.getLoginUser().getUserId() == 0;
	}

	public static Long getUserId(){
		return SecurityUtils.getLoginUser().getUserId();
	}

	/**
	 * 是否管理员
	 * 
	 * v1.0 zhanghc 2023年9月15日上午10:41:30
	 * @return boolean
	 */
	public static boolean isAdmin(SysUser user) {

		if (user == null) {
			return false;
		}

		List<SysRole> roles = user.getRoles();
		if (CollectionUtils.isEmpty(roles)) {
			return false;
		}
		for (SysRole role : roles) {
			if (RoleConstants.ADMIN.equals(role.getRoleKey())) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 是否考试用户
	 * 
	 * v1.0 zhanghc 2023年9月15日上午10:41:37
	 * @return boolean
	 */
	public static boolean isExamUser() {
		SysUser user = SecurityUtils.getLoginUser().getUser();
		if (user == null) {
			return false;
		}

		List<SysRole> roles = user.getRoles();
		if (CollectionUtils.isEmpty(roles)) {
			return false;
		}
		for (SysRole role : roles) {
			if (RoleConstants.EXAM_USER.equals(role.getRoleKey())) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 是否考试用户
	 * 
	 * v1.0 zhanghc 2023年9月15日上午10:41:37
	 * @return boolean
	 */
	public static boolean isExamUser(SysUser user) {
		if (user == null) {
			return false;
		}

		List<SysRole> roles = user.getRoles();
		if (CollectionUtils.isEmpty(roles)) {
			return false;
		}
		for (SysRole role : roles) {
			if (RoleConstants.EXAM_USER.equals(role.getRoleKey())) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 是否子管理员
	 * 
	 * v1.0 zhanghc 2023年9月15日上午10:41:37
	 * @return boolean
	 */
	public static boolean isSubAdmin() {
		SysUser user = SecurityUtils.getLoginUser().getUser();
		if (user == null) {
			return false;
		}

		List<SysRole> roles = user.getRoles();
		if (CollectionUtils.isEmpty(roles)) {
			return false;
		}
		for (SysRole role : roles) {
			if (RoleConstants.SUB_ADMIn.equals(role.getRoleKey())) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 是否子管理员
	 * 
	 * v1.0 zhanghc 2023年9月15日上午10:41:37
	 * @return boolean
	 */
	public static boolean isSubAdmin(SysUser user) {

		if (user == null) {
			return false;
		}

		List<SysRole> roles = user.getRoles();
		if (CollectionUtils.isEmpty(roles)) {
			return false;
		}
		for (SysRole role : roles) {
			if (RoleConstants.SUB_ADMIn.equals(role.getRoleKey())) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 是否阅卷用户
	 * 
	 * v1.0 zhanghc 2023年9月15日上午10:41:56
	 * @return boolean
	 */
	public static boolean isMarkUser() {
		SysUser user = SecurityUtils.getLoginUser().getUser();
		if (user == null) {
			return false;
		}

		List<SysRole> roles = user.getRoles();
		if (CollectionUtils.isEmpty(roles)) {
			return false;
		}
		for (SysRole role : roles) {
			if (RoleConstants.MARK_USER.equals(role.getRoleKey())) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 是否阅卷用户
	 * 
	 * v1.0 zhanghc 2023年9月15日上午10:41:56
	 * @return boolean
	 */
	public static boolean isMarkUser(SysUser user) {
		if (user == null) {
			return false;
		}

		List<SysRole> roles = user.getRoles();
		if (CollectionUtils.isEmpty(roles)) {
			return false;
		}
		for (SysRole role : roles) {
			if (RoleConstants.MARK_USER.equals(role.getRoleKey())) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 是否自己
	 * 
	 * v1.0 zhanghc 2023年9月15日上午10:41:56
	 * @param checkUserId 待检测用户ID
	 * @return boolean
	 */
	public static boolean isSelf(Long checkUserId) {
		return SecurityUtils.getUserId() == checkUserId.intValue();
	}
}
