package com.ghy.common.enums;

import org.apache.commons.lang3.StringUtils;

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Author 但星霖
 * @Date 2023-03-30 11：26：22
 * 说明：系统全局配置枚举相关
 */
public enum SysGlobalConfigDataTypeEnum implements IEnumType {

    VALUE_TIME_SECS(1, "时间-秒"),
    VALUE_TIME_MIN(2, "时间-分"),
    VALUE_TIME_HOUR(3, "时间-时"),
    VALUE_TIME_DAY(4, "时间-天"),
    VALUE_TIME_WEEK(5, "时间-周"),
    VALUE_TIME_MONTH(6, "时间-月"),
    VALUE_TIME_YEAR(7, "时间-年"),
    VALUE_TEXT(10, "文本"),
    VALUE_JSON(11, "JSON"),
    ;

    private final int code;
    private final String desc;

    private final static Map<Integer, SysGlobalConfigDataTypeEnum> BY_CODE_MAP
            = Arrays.stream(SysGlobalConfigDataTypeEnum.values()).collect(Collectors.toMap(SysGlobalConfigDataTypeEnum::code, code -> code));

    private final static Map<String, SysGlobalConfigDataTypeEnum> BY_NAME_MAP
            = Arrays.stream(SysGlobalConfigDataTypeEnum.values()).collect(Collectors.toMap(code -> code.name().toLowerCase(), code -> code));


    /**
     * @param code 代码
     * @param desc 描述
     */
    SysGlobalConfigDataTypeEnum(final int code, final String desc) {
        this.code = code;
        this.desc = desc;
    }

    @Override
    public int code() {
        return this.code;
    }

    @Override
    public String desc() {
        return this.desc;
    }

    /**
     * @param code 代码
     * @return 转换出来的状态码
     */
    public static SysGlobalConfigDataTypeEnum parse(Integer code) {
        return BY_CODE_MAP.get(code);
    }

    public static SysGlobalConfigDataTypeEnum parse(Integer code, SysGlobalConfigDataTypeEnum defaultState) {
        return BY_CODE_MAP.getOrDefault(code, defaultState);
    }

    /**
     * @param name 名字
     * @return 转换出来的状态码
     */
    public static SysGlobalConfigDataTypeEnum parse(String name) {
        if (StringUtils.isBlank(name)) {
            return null;
        }
        return BY_NAME_MAP.get(name.trim().toLowerCase());
    }

    public static SysGlobalConfigDataTypeEnum parse(String name, SysGlobalConfigDataTypeEnum defaultState) {
        if (StringUtils.isBlank(name)) {
            return defaultState;
        }
        return BY_NAME_MAP.getOrDefault(name.trim().toLowerCase(), defaultState);
    }
}




