package cn.estsh.i3plus.ext.mes.api.base;


import io.swagger.annotations.ApiOperation;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

/**
 * @Author: Wynne.Lu
 * @CreateDate: 2019/8/30 1:42 PM
 * @Description:
 **/
public interface IEnumDataService {

    /**
     * 获取所有mes枚举
     *
     * @return {@code List<Map>} 结构枚举数据
     * @throws NoSuchMethodException
     * @throws ClassNotFoundException
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     */
    @ApiOperation("获取所有mes枚举")
    List<Map<String, Object>> getAllMesEnums()
            throws NoSuchMethodException, ClassNotFoundException, InvocationTargetException, IllegalAccessException;

    /**
     * 根据枚举名获取枚举
     *
     * @param enumName 枚举名
     * @return 枚举数据
     */
    @ApiOperation("根据枚举名获取枚举")
    Map<String, Object> doGetMesEnumByEnumName(String enumName);

    /**
     * 通过class获取枚举
     *
     * @param enumName 枚举名
     * @param clazz    class
     * @return class对应的枚举数据
     */
    @ApiOperation("通过class获取枚举")
    Map<String, Object> getEnumByClazzEnum(String enumName, Class clazz);

    /**
     * 通过class获取枚举的values
     *
     * @param enumName 枚举名
     * @param clazz    class
     * @return 枚举的values
     */
    @ApiOperation("通过class获取枚举的values")
    List<Map<String, Object>> getEnumValuesByClazzEnum(String enumName, Class clazz);

    /**
     * 根据枚举key获取枚举对应的value 获取缓存中的语言
     *
     * @param clazz class
     * @return 特定key获取枚举对应的value
     */
    @ApiOperation("根据枚举key获取枚举对应的value 获取缓存中的语言")
    Map<String, String> getEnumLangeuageKeyByClazzEnum(Class clazz);
}
