package com.jeesharp.business.modules.common.enums.support;

/**
 * 枚举 {@code fromValue} / {@code getDescByValue} 工具，减少各模块重复遍历样板代码。
 *
 * @author jeesharp
 * @since 2026-07-03
 */
public final class EnumValueSupport {

    private EnumValueSupport() {
    }

    public static <E extends Enum<E> & IntValueEnum> E fromIntValue(Class<E> enumType, Integer value) {
        if (value == null || enumType == null) {
            return null;
        }
        for (E item : enumType.getEnumConstants()) {
            if (value.equals(item.getValue())) {
                return item;
            }
        }
        return null;
    }

    public static <E extends Enum<E> & IntValueEnum> String descByIntValue(Class<E> enumType, Integer value) {
        E item = fromIntValue(enumType, value);
        return item != null ? item.getDesc() : "";
    }

    public static <E extends Enum<E> & StringValueEnum> E fromStringValue(Class<E> enumType, String value) {
        if (value == null || enumType == null) {
            return null;
        }
        String normalized = value.trim();
        if (normalized.isEmpty()) {
            return null;
        }
        for (E item : enumType.getEnumConstants()) {
            if (normalized.equalsIgnoreCase(item.getValue())) {
                return item;
            }
        }
        return null;
    }

    public static <E extends Enum<E> & StringValueEnum> String descByStringValue(Class<E> enumType, String value) {
        E item = fromStringValue(enumType, value);
        return item != null ? item.getDesc() : "";
    }
}
