package com.fitbank.enums;

public class UtilEnums {

    private UtilEnums() {
    }

    /**
     * Metodo que obtiene un BasicEnum desde un String
     * 
     * @param <T>
     *            Tipo del BasicEnum
     * @param clase
     *            Clase del BasicEnum
     * @param value
     *            Valor en String
     * 
     * @return BasicEnum del tipo T
     */
    public static <T extends Enum<T>> T getEnumValue(Class<T> clase,
            String value) {
        if (BasicEnum.class.isAssignableFrom(clase)) {
            for (T t : clase.getEnumConstants()) {
                if (((BasicEnum) t).getValue().equalsIgnoreCase(value)) {
                    return t;
                }
            }
        } else {
            return Enum.valueOf(clase, value);
        }

        return null;
    }

    public static String getValue(Enum<?> o) {
        if (o instanceof BasicEnum) {
            return ((BasicEnum) o).getValue();
        } else if (o.getClass().isEnum()) {
            return o.name();
        } else {
            return null;
        }
    }

    public static String getDescription(Enum<?> o) {
        if (o instanceof BasicEnum) {
            return ((BasicEnum) o).getDescription();
        } else if (o.getClass().isEnum()) {
            // TODO obtener descripciones desde el archivo .properties
            return o.toString();
        } else {
            return null;
        }
    }

}
