package com.seer.teach.common.enums;

import com.seer.teach.common.validation.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;

import static cn.hutool.core.util.ArrayUtil.firstMatch;

@AllArgsConstructor
@Getter
public enum RoleEnum implements ArrayValuable<String> {

    /**
     * 管理员
     */
    ADMIN("ADMIN", "管理员", "后端管理系统-管理员"),

    /**
     * 家长
     */
    PARENT("PARENT", "家长", "tv和小程序端家长"),

    /**
     * 孩子
     */
    CHILDREN("CHILDREN", "孩子", "tv和小程序端孩子"),

    /**
     * 经销商
     */
    DISTRIBUTOR("DISTRIBUTOR", "经销商", "微信服务号经销商"),

    /**
     * 仓管
     */
    WAREHOUSE_MANAGER("WAREHOUSE_MANAGER", "仓管", "微信服务号仓管"),

    /**
     * 教师
     */
    TEACHER("TEACHER", "教师", "教师角色"),

    /**
     * 访客
     */
    GUEST("GUEST", "GUEST", "访客"),

    /**
     * 代理商
     */
    AGENT("AGENT", "代理商", "代理商角色");

    public static final String[] ARRAYS = Arrays.stream(values()).map(RoleEnum::getCode).toArray(String[]::new);

    /**
     * 角色编码
     */
    private final String code;
    /**
     * 角色英文名
     */
    private final String name;
    /**
     * 角色中文名
     */
    private final String description;

    @Override
    public String[] array() {
        return ARRAYS;
    }

    public static RoleEnum valueOfCode(String code) {
        return firstMatch(value -> value.getCode().equals(code), values());
    }

}