package nc.vo.imag.verify;

import nc.dto.imag.invoice.PInvoice;

/**
 * 发票类型枚举
 *
 * @author gaozhdf@yonyou.com
 *
 */
public enum InvoiceTypeEnum {

    /**
     * 增值税电子普通发票
     */
    ZZSDZPTFP(1, PInvoice.class),
    /**
     * 增值税电子专用发票
     */
    ZZSDZZYFP(2, PInvoice.class),
    /**
     * 增值税普通发票
     */
    ZZSPTFP(3, PInvoice.class),
    /**
     * 增值税专用发票
     */
    ZZSZYFP(4, PInvoice.class),
    /**
     * 增值税电子普通发票（成品油）
     */
    ZZSDZPTFP_CPY(8, PInvoice.class),
    /**
     * 成品油普通发票(卷式)
     */
    CPYPTFP_JS(9, PInvoice.class),
    /**
     * 成品油普通发票
     */
    CPYPTFP(10, PInvoice.class),
    /**
     * 成品油专用发票
     */
    CPYZYFP(11, PInvoice.class),
    /**
     * 增值税普通发票(卷式)
     */
    ZZSPTFP_JS(12, PInvoice.class),
    /**
     * 通行费增值税电子普通发票
     */
    TXFZZSDZPTFP(14, PInvoice.class),
    /**
     * 机打发票
     */
    JDFP(15, null),
    /**
     * 火车票
     */
    HCP(16, null),

    /**
     * 航空客票
     */
    HKKP(17, null),
    /**
     * 客运汽车票
     */
    KYQCP(18, null),

    /**
     * 出租车票
     */
    CZCP(19, null),

    /**
     * 过路费票
     */
    GLFP(20, null),

    /**
     * 定额发票
     */
    DEFP(21, null),
    //@全电发票@@特殊票种电子凭证@begin
    /**
     * 电子发票-增值税专用发票
     */
    DZFP_ZZSZYFP(31, null),

    /**
     * 电子发票-增值税普通发票
     */
    DZFP_ZZSPTFP(32, null),
    /**
     * 纸质发票(增值税专用发票)
     */
    ZZFP_ZZSZYFP(33, null),

    /**
     * 纸质发票(普通发票)
     */
    ZZFP_ZZSPTFP(34, null),
    //@全电发票@@特殊票种电子凭证@end
    /**
     * 增值税专用发票(机动车)
     */
    JDCZYFP(99,PInvoice.class);

    /**
     * 类型编码
     */
    private int typeCode;
    private Class<?> clazz;

    private InvoiceTypeEnum(int typeCode, Class<?> clazz) {

        this.typeCode = typeCode;
        this.clazz = clazz;
    }

    public int getTypeCode() {

        return typeCode;
    }

    public Class<?> getClazz() {

        return clazz;
    }

    /**
     * getTypeEnumByTypeCode 根据类型编码获取当前类型
     *
     * @param typeCode
     * @return
     */
    public static InvoiceTypeEnum getTypeEnumByTypeCode(int typeCode) {

        InvoiceTypeEnum[] items = InvoiceTypeEnum.values();
        for (int i = 0; i < items.length; i++) {
            if (items[i].getTypeCode() == typeCode) {
                return items[i];
            }
        }
        return null;
    }

    /**
     *
     * @Description 判断是否是纸质发票
     *
     * @param typeCode
     * @return
     */
    public static boolean isPaperInvoice(int typeCode) {

        if (InvoiceTypeEnum.ZZSPTFP.getTypeCode() == typeCode || InvoiceTypeEnum.ZZSZYFP.getTypeCode() == typeCode
                || InvoiceTypeEnum.CPYPTFP_JS.getTypeCode() == typeCode
                || InvoiceTypeEnum.CPYPTFP.getTypeCode() == typeCode
                || InvoiceTypeEnum.CPYZYFP.getTypeCode() == typeCode
                || InvoiceTypeEnum.ZZSPTFP_JS.getTypeCode() == typeCode
                //@全电发票@@特殊票种电子凭证@begin
                || InvoiceTypeEnum.ZZFP_ZZSZYFP.getTypeCode() == typeCode
                || InvoiceTypeEnum.ZZFP_ZZSPTFP.getTypeCode() == typeCode)
        //@全电发票@@特殊票种电子凭证@end
        {
            return true;
        }

        return false;
    }

    /**
     *
     * @Description 判断是否是电子发票
     *
     * @param typeCode
     * @return
     */
    public static boolean isEInvoice(int typeCode) {

        if (InvoiceTypeEnum.ZZSDZPTFP.getTypeCode() == typeCode || InvoiceTypeEnum.ZZSDZZYFP.getTypeCode() == typeCode
                || InvoiceTypeEnum.ZZSDZPTFP_CPY.getTypeCode() == typeCode
                || InvoiceTypeEnum.TXFZZSDZPTFP.getTypeCode() == typeCode)
        {
            return true;
        }

        return false;
    }
}
