package com.ruoyi.common.core.enums;


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

public enum DataTypeEnums{

    /**
     * 	时间戳。缺省精度毫秒，可支持微秒和纳秒
     */
    TIMESTAMP(1,"timestamp"),

    /**
     * 整型，范围 [-2^31, 2^31-1]
     */
    INT(2, "int"),

    /**
     * 长整型，范围 [-2^63, 2^63-1]
     */
    BIGINT(3, "bigint"),

    /**
     * 	浮点型，有效位数 6-7，范围 [-3.4E38, 3.4E38]
     */
    FLOAT(4, "float"),

    /**
     * 	双精度浮点型，有效位数 15-16，范围 [-1.7E308, 1.7E308]
     */
    DOUBLE(5, "double"),

    /**
     * 记录单字节字符串，建议只用于处理 ASCII 可见字符,最大长度16000，中文等多字节字符需使用 NCHAR
     */
    BINARY(6, "binary"),

    /**
     * 短整型， 范围 [-32768, 32767]
     */
    SMALLINT(7, "smallint"),

    /**
     * 单字节整型，范围 [-128, 127]
     */
    TINYINT(8, "tinyint"),

    /**
     * 布尔型，{true, false}
     */
    BOOL(9, "bool"),

    /**
     * 记录包含多字节字符在内的字符串，如中文字符。
     * 每个 NCHAR 字符占用 4 字节的存储空间。字符串两端使用单引号引用，字符串内的单引号需用转义字符 \'。
     * NCHAR 使用时须指定字符串大小，类型为 NCHAR(10) 的列表示此列的字符串最多存储 10 个 NCHAR 字符。
     * 如果用户字符串长度超出声明长度，将会报错。最大长度4093
     */
    NCHAR(10, "nchar"),


    /**
     * json数据类型 只有tag类型可以是json格式
     */
    JSON(11, "json");

    // 性别值数组
    public static final List<Integer> genderValueList = Arrays.stream(values()).map(DataTypeEnums::getDataCode).collect(Collectors.toList());

    // 性别名数组
    public static final List<String> genderNameList = Arrays.stream(values()).map(DataTypeEnums::getDataType).collect(Collectors.toList());

    // 属性值与属性名Map
    public static final Map<Integer, String> dataCodeTypeMap = Arrays.stream(values()).collect(
            Collectors.toMap(
                    DataTypeEnums::getDataCode,
                    DataTypeEnums::getDataType
            )
    );

    // 属性名与属性值Map
    public static final Map<String, Integer> dataTypeCodeMap = Arrays.stream(values()).collect(
            Collectors.toMap(
                    DataTypeEnums::getDataType,
                    DataTypeEnums::getDataCode
            )
    );

    // 性别值
    private final Integer dataCode;

    // 性别名
    private final String dataType;

    DataTypeEnums(Integer dataCode, String dataType) {
        this.dataCode = dataCode;
        this.dataType = dataType;
    }

    public Integer getDataCode() {
        return dataCode;
    }

    public String getDataType() {
        return dataType;
    }


    public static void main(String[] args) {
        System.out.println(dataCodeTypeMap.get(1));
    }
}
