package com.boman.domain;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author tjf
 * @Date: 2021/04/22/15:16
 */
public enum RoleEnum {

    /** 新增 */
    A("A","新增"),
    /** 修改 */
    M("M","修改"),
    /** 删除 */
    D("D","删除"),
    /** 查询 */
    Q("Q","查询"),
    /** 提交 */
    S("S","提交"),
    /** 反提交 */
    U("U","反提交"),
    /** 导入 */
    I("I","导入"),
    /** 导出 */
    E("E","导出");

    private final String role;
    private final String name;

    RoleEnum(String role, String name) {
        this.role = role;
        this.name = name;
    }

    public String getRole() {
        return role;
    }

    public String getName() {
        return name;
    }

    /**
     *
     * @param role
     * @return
     */
    public static String getValue(String role) {
        if(null != role){
            for(RoleEnum roleEnum : RoleEnum.values()){
                if(role.equals(roleEnum.getRole())){
                    return roleEnum.getName();
                }
            }
        }
        return null;
    }

    /**
     * 功能描述: 拿到所有的名称 eg: 新增、修改.....
     *
     * @param
     * @return java.util.List<java.lang.String>
     */
    public static List<String> names(){
        RoleEnum[] values = RoleEnum.values();
        return Arrays.stream(values).map(RoleEnum::getName).collect(Collectors.toList());
    }

    /**
     * 功能描述: 拿到所有的roles, 顺序很重要
     * eg: A、M.....
     *
     * @return java.util.List<java.lang.String>
     */
    public static List<String> roles(){
        RoleEnum[] values = RoleEnum.values();
        return Arrays.stream(values).map(RoleEnum::getRole).collect(Collectors.toList());
    }

    /**
     * 功能描述: 拿到所有的roles eg: A、M.....
     *
     * @return java.util.List<java.lang.String>
     */
    public static List<Map<String, String>> all() {
        RoleEnum[] values = RoleEnum.values();
        List<Map<String, String>> result = new ArrayList<>(values.length);
        for (RoleEnum value : values) {
            Map<String, String> map = new HashMap<>(2);
            map.put("name", value.name);
            map.put("role", value.role);
            result.add(map);
        }
        return result;
    }

   /**
    * 功能描述: 拿到所有的roles eg: A、M.....
    *
    * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
    */
    public static List<Map<String, Object>> initData() {
        List<String> roles = roles();
        List<Map<String, Object>> result = new ArrayList<>(roles.size());
        for (String role : roles) {
            Map<String, Object> jsonObject = new HashMap<>(2);
            jsonObject.put("name", role);
            jsonObject.put("type", "0");
            result.add(jsonObject);
        }

        return result;
    }

   /**
    * 功能描述: 新配的角色，点选菜单，判断菜单对应的表的menuRole
    *
    * @param btnList 点选菜单，判断菜单对应的表的menuRoleList
    * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
    */
    public static List<Map<String, Object>> initDataByBtnList(List<String> btnList) {
        List<String> roles = roles();
        List<Map<String, Object>> result = new ArrayList<>(roles.size());
        for (String role : roles) {
            Map<String, Object> jsonObject = new HashMap<>(2);
            jsonObject.put("name", role);
            if (btnList.contains(role)) {
                // 显示框框，但是不勾选
                jsonObject.put("type", false);
            } else {
                jsonObject.put("type", "0");
            }
            result.add(jsonObject);
        }

        return result;
    }
}
