package com.mosty.common.config.config;

import com.mosty.common.base.util.SpringIocContext;
import com.mosty.common.config.constant.enums.DictElementEnum;
import lombok.Data;
import lombok.SneakyThrows;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.lang.reflect.Field;

/**
 *  字典组件编码配置
 * @author kevin
 * @date 2022/2/10 11:08 PM
 * @since 1.0.0
 */
@Data
@Configuration
public class DictElementConfig {

    /** 民族 */
    @Value("${dict.element.nation:nation}")
    private String nation;

    /** 性别 */
    @Value("${dict.element.gender:gender}")
    private String gender;

    /** 血型 */
    @Value("${dict.element.blood-type:bloodType}")
    private String bloodType;

    /** 学历 */
    @Value("${dict.element.education:education}")
    private String education;

    /** 政治面貌 */
    @Value("${dict.element.political-outlook:politicalOutlook}")
    private String politicalOutlook;

    /** 婚姻状况 */
    @Value("${dict.element.marital-status:maritalStatus}")
    private String maritalStatus;

    /** 亲属关系 */
    @Value("${dict.element.relationship:relationship}")
    private String relationship;

    /** 车辆型号 */
    @Value("${dict.element.vehicle-model:vehicleModel}")
    private String vehicleModel;

    /** 车辆颜色 */
    @Value("${dict.element.vehicle-color:vehicleColor}")
    private String vehicleColor;

    /** 机动车号牌种类 */
    @Value("${dict.element.vehicle-number-type:vehicleNumberType}")
    private String vehicleNumberType;

    /** 车牌号 */
    @Value("${dict.element.car-number:carNumber}")
    private String carNumber;

    /** 权限列表 */
    @Value("${dict.element.permission-list:permissionList}")
    private String permissionList;

    /**
     * 获取当前字典的编码
     * @param elementEnum 组件类型枚举
     * @return 组件字典编码
     */
    @SneakyThrows
    public static String getDictCode(DictElementEnum elementEnum) {
        String code = elementEnum.code;
        DictElementConfig config = SpringIocContext.getBean(DictElementConfig.class);
        Field codeField = DictElementConfig.class.getDeclaredField(code);
        return (String)codeField.get(config);
    }

}
