package com.microservices.common.core.enums;

import lombok.Getter;

/**
 * 系统角色信息
 *
 * @author wanjia
 */
@Getter
public enum SystemRole {
    /**
     * 组织管理员
     */
    PMS_ORG_ADMIN("组织管理员", "pms_org_admin", false),
    /**
     * 项目经理
     */
    PMS_PROJECT_MANAGER("项目经理", "pms_project_manager", false),
    /**
     * 产品经理
     */
    PMS_PRODUCT_MANAGER("产品经理", "pms_product_manager", false),
    /**
     * 普通成员
     */
    PMS_USER("普通成员", "pms_user", false),
    /**
     * 测试人员
     */
    PMS_TEST_USER("测试人员", "pms_test_user", false),
    /**
     * 客户
     */
    PMS_CUSTOMER("客户", "pms_customer", false),
    /**
     * 平台管理员
     */
    PLATFORM_ADMIN("平台管理员", "platform_admin", false),
    /**
     * 专区管理员
     */
    ZONE_ADMIN("专区管理员", "zone_admin", false),
    /**
     * 专区运营人员
     */
    ZONE_OPERATOR("专区运营人员", "zone_operationer", false),
    /**
     * 专区会员
     */
    ZONE_MEMBER("专区会员", "zone_member", true),
    /**
     * 未知角色
     */
    UNKNOWN_ROLE("未知角色", "unknown_role",false);

    private final String roleName;
    private final String roleKey;
    /**
     * 是否为虚拟角色，虚拟角色则不可有用户手动在组织中切换设置，系统自动处理相关逻辑
     */
    private final Boolean isVirtual;

    SystemRole(String roleName, String roleKey, Boolean isVirtual) {
        this.roleName = roleName;
        this.roleKey = roleKey;
        this.isVirtual = isVirtual;
    }

    public static SystemRole getSystemRole(String roleKey) {
        for (SystemRole systemRole : SystemRole.values()) {
            if (systemRole.getRoleKey().equals(roleKey)) {
                return systemRole;
            }
        }
        return UNKNOWN_ROLE;
    }

    public static Boolean isVirtual(String roleKey) {
        for (SystemRole systemRole : SystemRole.values()) {
            if (systemRole.roleKey.equals(roleKey)) {
                return systemRole.isVirtual;
            }
        }
        return false;
    }

    public static Boolean isDefault(String roleKey) {
        for (SystemRole systemRole : SystemRole.values()) {
            if (systemRole.roleKey.equals(roleKey)) {
                return true;
            }
        }
        return false;
    }
}
