package pwc.taxtech.atms.constant.enums;

import java.util.HashMap;
import java.util.Map;

public class RevenueConfEnum {

    /**
     * 账载收入类型
     */
    public enum AccountType {
        Zero(0, "0值"),
        Account(1, "科目"),
        Manual(2, "手工录入");
        private Integer code;
        private String name;
        public static final Map<Integer, String> MAPPING = new HashMap<>();
        public static final Map<String, Integer> REVERSAL_MAPPING = new HashMap<>();
        AccountType(Integer code, String name) {
            this.code = code;
            this.name = name;
        }

        public Integer getCode() {
            return code;
        }

        public String getName() {
            return name;
        }

        static {
            for (RevenueConfEnum.AccountType accountType : RevenueConfEnum.AccountType.values()) {
                MAPPING.put(accountType.getCode(), accountType.getName());
                REVERSAL_MAPPING.put(accountType.getName(),accountType.getCode());
            }
        }
    }

    /**
     * 账载收入类型
     */
    public enum TaxBase {
        Account(1, "账载收入"),
        Invoice(2, "开票收入"),
        Manual(3, "手工录入"),
        Period_Dr(4, "借方发生额"),
        Period_Cr(5, "贷方发生额");
        private Integer code;
        private String name;
        public static final Map<Integer, String> MAPPING = new HashMap<>();
        public static final Map<String, Integer> REVERSAL_MAPPING = new HashMap<>();
        TaxBase(Integer code, String name) {
            this.code = code;
            this.name = name;
        }

        public Integer getCode() {
            return code;
        }

        public String getName() {
            return name;
        }

        static {
            for (RevenueConfEnum.TaxBase taxBase : RevenueConfEnum.TaxBase.values()) {
                MAPPING.put(taxBase.getCode(), taxBase.getName());
                REVERSAL_MAPPING.put(taxBase.getName(),taxBase.getCode());
            }
        }
    }

    /**
     * 计税方法
     */
    public enum TaxType {
        Common(0, "一般计税"),
        Simple(1, "简易计税"),
        Tax_Exemption(2, "免抵退税"),
        Free(3, "免税");
        private Integer code;
        private String name;
        public static final Map<Integer, String> MAPPING = new HashMap<>();
        public static final Map<String, Integer> REVERSAL_MAPPING = new HashMap<>();
        TaxType(Integer code, String name) {
            this.code = code;
            this.name = name;
        }

        public Integer getCode() {
            return code;
        }

        public String getName() {
            return name;
        }

        static {
            for (RevenueConfEnum.TaxType taxType : RevenueConfEnum.TaxType.values()) {
                MAPPING.put(taxType.getCode(), taxType.getName());
                REVERSAL_MAPPING.put(taxType.getName(),taxType.getCode());
            }
        }
    }

    /**
     * 收入类型
     */
    public enum RevenueType {
        Service(0, "货物及加工修理修配劳务"),
        Assets(1, "服务、不动产和无形资产");
        private Integer code;
        private String name;
        public static final Map<Integer, String> MAPPING = new HashMap<>();
        public static final Map<String, Integer> REVERSAL_MAPPING = new HashMap<>();
        RevenueType(Integer code, String name) {
            this.code = code;
            this.name = name;
        }

        public Integer getCode() {
            return code;
        }

        public String getName() {
            return name;
        }

        static {
            for (RevenueConfEnum.RevenueType revenueType : RevenueConfEnum.RevenueType.values()) {
                MAPPING.put(revenueType.getCode(), revenueType.getName());
                REVERSAL_MAPPING.put(revenueType.getName(),revenueType.getCode());
            }
        }
    }

    /**
     * 状态
     */
    public enum Status {
        Enable(0, "启用"),
        Disable(1, "停用");
        private Integer code;
        private String name;
        public static final Map<Integer, String> MAPPING = new HashMap<>();
        public static final Map<String, Integer> REVERSAL_MAPPING = new HashMap<>();
        Status(Integer code, String name) {
            this.code = code;
            this.name = name;
        }

        public Integer getCode() {
            return code;
        }

        public String getName() {
            return name;
        }

        static {
            for (RevenueConfEnum.Status status : RevenueConfEnum.Status.values()) {
                MAPPING.put(status.getCode(), status.getName());
                REVERSAL_MAPPING.put(status.getName(),status.getCode());
            }
        }
    }

    public enum EXECLColumn {
        Column_1(0, "收入类型名称"),
        Column_2(1, "适用公司"),
        Column_3(2, "账载收入"),
        Column_4(3, "科目代码"),
        Column_5(4, "利润中心代码"),
        Column_6(5, "产品代码"),
        Column_7(6, "税率"),
        Column_8(7, "计税收入"),
        Column_9(8, "计税收入科目代码"),
        Column_10(9, "收入类型"),
        Column_11(10, "计税方法"),
        Column_12(11, "状态"),
        Column_13(12, "起始日期"),
        Column_14(13, "终止日期")
        ;
        private Integer index;
        private String name;
        public static final Map<Integer, String> MAPPING = new HashMap<>();

        EXECLColumn(Integer index, String name) {
            this.index = index;
            this.name = name;
        }

        public Integer getIndex() {
            return index;
        }

        public String getName() {
            return name;
        }

        static {
            for (TaxesCalculateReportEnum.Column accountType : TaxesCalculateReportEnum.Column.values()) {
                MAPPING.put(accountType.getIndex(), accountType.getName());
            }
        }
    }
}