package com.sunxung.factoring.dict.impl;

import com.sunxung.factoring.component.exception.ValidatorException;
import com.sunxung.factoring.component.util.CodeUtil;
import com.sunxung.factoring.dict.Dict;
import com.sunxung.factoring.entity.sys.Dictionary;
import com.sunxung.factoring.service.sys.DictionaryService;

/**
 * @author liutao
 * @date 2021.09.17
 */
public class EnterpriseNatureDict extends Dict {
    /**
     * 编码
     */
    public static String CODE = "enterpriseNature";
    /**
     * 中文名称
     */
    public static String CNAME = "B端_企业性质";

    /**
     * 子项枚举
     */
    public static enum ChildEnum {
        /**
         * 事业单位
         */
        ONE("enterpriseNature_1", "事业单位"),
        /**
         * 八大建筑类央企系
         */
        TWO("enterpriseNature_2", "八大建筑类央企系"),
        /**
         * 建筑类省属国企系
         */
        THREE("enterpriseNature_3", "建筑类省属国企系"),
        /**
         * 建筑类市属国企系
         **/
        FORE("enterpriseNature_4", "建筑类市属国企系"),
        /**
         * 非建筑类央企系
         */
        FIVE("enterpriseNature_5", "非建筑类央企系"),
        /**
         * 非建筑类省属国企系
         */
        SIX("enterpriseNature_6", "非建筑类省属国企系"),
        /**
         * 非建筑类市属国企系
         */
        SEVEN("enterpriseNature_7", "非建筑类市属国企系"),
        /**
         * 其他类
         **/
        EIGHT("enterpriseNature_8", "其他类"),
        /**
         * 其他类
         **/
        NINE("enterpriseNature_9", "民营上市公司"),
        /**
         * 其他类
         **/
        TEN("enterpriseNature_10", "民营非上市公司");
        /**
         * 编码
         */
        private String code;
        /**
         * 名称
         */
        private String cname;

        ChildEnum(String code, String cname) {
            this.code = code;
            this.cname = cname;
        }

        public String getCode() {
            return code;
        }

        public String getCname() {
            return cname;
        }
    }

    @Override
    public void add(int gradation) {
        Dictionary domain = addDomainDictionary(null, gradation, dictionaryService);
        if (domain == null) {
            throw new ValidatorException(CodeUtil.FAIL, "B端_企业性质字典新增失败");
        }
        for (FileModuleDict.ChildEnum child : FileModuleDict.ChildEnum.values()) {
            addChildEnumDictionary(domain.getId(), child);
        }
    }

    private Dictionary addChildEnumDictionary(Long parentId, FileModuleDict.ChildEnum child) {
        Dictionary dictionary = new Dictionary();
        dictionary.setParentId(parentId);
        dictionary.setName(child.getCname());
        dictionary.setCode(child.getCode());
        dictionary.setGradation(child.ordinal());
        return dictionaryService.add(dictionary);
    }

    private Dictionary addDomainDictionary(Long parentId, int gradation, DictionaryService dictionaryService) {
        Dictionary dictionary = new Dictionary();
        dictionary.setParentId(parentId);
        dictionary.setName(CNAME);
        dictionary.setCode(CODE);
        dictionary.setGradation(gradation);
        return dictionaryService.add(dictionary);
    }
}
