package com.m2pool.pool.utils;

import com.m2pool.common.core.utils.StringUtils;

import java.lang.reflect.Method;

/**
 * @Description 枚举工具类
 * @Date 2024/6/13 10:54
 * @Author dy
 */
public class EnumUtils {

    /**
     * 通过值判断数值是否属于枚举类的值
     * @param clzz 枚举类 Enum
     * @param code
     * @author wayleung
     * @return
     */
    public static boolean isInclude(Class<?> clzz,String code){

        if(StringUtils.isEmpty(code)){
            return false;
        }

        try {
            if(clzz.isEnum()){
                Object[] enumConstants = clzz.getEnumConstants();
                Method name = clzz.getMethod("name");

                for (Object enumConstant:enumConstants){
                    if (name.invoke(enumConstant).equals(code.toUpperCase())) {
                        return true;
                    }
                }

            }
        }catch (Exception e){
            throw new RuntimeException();
        }
        return false;
    }
    /**
     * 通过值判断数值是否属于枚举类的值
     * @param clzz 枚举类 Enum
     * @param code
     * @author wayleung
     * @return
     */

    public static Object get(Class<?> clzz,String code){

        if(StringUtils.isEmpty(code)){
            return null;
        }


        try {
            if(clzz.isEnum()){
                Object[] enumConstants = clzz.getEnumConstants();
                Method getInfo = clzz.getMethod("name");
                for (Object enumConstant:enumConstants){
                    if (getInfo.invoke(enumConstant).equals(code.toUpperCase())) {
                        return enumConstant;
                    }
                }

            }
        }catch (Exception e){
            throw new RuntimeException();
        }
        return null;
    }

    public static String getNumberTypeStr(Class<?> clzz,String value){

        if(StringUtils.isEmpty(value)){
            return null;
        }

        try {
            if(clzz.isEnum()){
                Object[] enumConstants = clzz.getEnumConstants();
                Method getInfo = clzz.getMethod("getInfo");
                Method getValue = clzz.getMethod("getValue");
                for (Object enumConstant:enumConstants){
                    if (getInfo.invoke(enumConstant).equals(value)) {
                        return (String) getValue.invoke(enumConstant);
                    }
                }

            }
        }catch (Exception e){
            throw new RuntimeException();
        }
        return null;
    }
}
