package pwc.taxtech.atms.dto.vatdto;

import com.fasterxml.jackson.annotation.JsonProperty;
import pwc.taxtech.atms.anno.ExcelCell;

import java.math.BigDecimal;
import java.util.Date;

public class OutputVATInvoiceInfoDto {
    @JsonProperty("invoiceID")
    private String invoiceId;

    private Integer invoiceType;
    @ExcelCell(index=1)
    private String invoiceTypeName;
    @ExcelCell(index=2)
    private String classCode;
    @ExcelCell(index=3)
    private String invoiceNumber;
    @ExcelCell(index=4)
    private String buyerName;
    @ExcelCell(index=5)
    private String buyerTaxNumber;
//    @ExcelCell(index=6)
    private String bankAccount;
//    @ExcelCell(index=7)
    private String phoneNum;
    @ExcelCell(index=6)
    private Date invoiceDate;
//    @ExcelCell(index=9)
    private String codeVersion;
    @ExcelCell(index=7)
    private String productName;
//    @ExcelCell(index=10)
    private String documentNum;
//    @ExcelCell(index=12)
    private String productStandard;
//    @ExcelCell(index=13)
    private String unit;
    @ExcelCell(index=8)
    private Integer quantity;
    @ExcelCell(index=9)
    private Double unitPrice;
    @ExcelCell(index=10)
    private BigDecimal amount;
    @ExcelCell(index=11)
    private String taxRateS;
    @ExcelCell(index=12)
    private BigDecimal taxAmount;
    private String taxClassCode;
    @JsonProperty("periodID")
    private int periodId;
    private boolean isDuplicate;
    private BigDecimal amountDifference;

    public void setInvoiceTypeName(String invoiceTypeName) {
        this.invoiceTypeName = invoiceTypeName;
    }

    public String getInvoiceId() {
        return invoiceId;
    }

    public void setInvoiceId(String invoiceId) {
        this.invoiceId = invoiceId;
    }

    public Integer getInvoiceType() {
        return invoiceType;
    }

    public void setInvoiceType(Integer invoiceType) {
        this.invoiceType = invoiceType;
    }

    public String getClassCode() {
        return classCode;
    }

    public void setClassCode(String classCode) {
        this.classCode = classCode;
    }

    public String getInvoiceNumber() {
        return invoiceNumber;
    }

    public void setInvoiceNumber(String invoiceNumber) {
        this.invoiceNumber = invoiceNumber;
    }

    public String getBuyerName() {
        return buyerName;
    }

    public void setBuyerName(String buyerName) {
        this.buyerName = buyerName;
    }

    public String getBuyerTaxNumber() {
        return buyerTaxNumber;
    }

    public void setBuyerTaxNumber(String buyerTaxNumber) {
        this.buyerTaxNumber = buyerTaxNumber;
    }

    public String getBankAccount() {
        return bankAccount;
    }

    public void setBankAccount(String bankAccount) {
        this.bankAccount = bankAccount;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }

    public Date getInvoiceDate() {
        return invoiceDate;
    }

    public void setInvoiceDate(Date invoiceDate) {
        this.invoiceDate = invoiceDate;
    }

    public String getCodeVersion() {
        return codeVersion;
    }

    public void setCodeVersion(String codeVersion) {
        this.codeVersion = codeVersion;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getDocumentNum() {
        return documentNum;
    }

    public void setDocumentNum(String documentNum) {
        this.documentNum = documentNum;
    }

    public String getProductStandard() {
        return productStandard;
    }

    public void setProductStandard(String productStandard) {
        this.productStandard = productStandard;
    }

    public String getUnit() {
        return unit;
    }

    public void setUnit(String unit) {
        this.unit = unit;
    }

    public Integer getQuantity() {
        return quantity;
    }

    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    public Double getUnitPrice() {
        return unitPrice;
    }

    public void setUnitPrice(Double unitPrice) {
        this.unitPrice = unitPrice;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public String getTaxRateS() {
        return taxRateS;
    }

    public void setTaxRateS(String taxRateS) {
        this.taxRateS = taxRateS;
    }

    public BigDecimal getTaxAmount() {
        return taxAmount;
    }

    public void setTaxAmount(BigDecimal taxAmount) {
        this.taxAmount = taxAmount;
    }

    public String getTaxClassCode() {
        return taxClassCode;
    }

    public void setTaxClassCode(String taxClassCode) {
        this.taxClassCode = taxClassCode;
    }

    public int getPeriodId() {
        return periodId;
    }

    public void setPeriodId(int periodId) {
        this.periodId = periodId;
    }

    public boolean getIsDuplicate() {
        return isDuplicate;
    }

    public void setIsDuplicate(boolean duplicate) {
        isDuplicate = duplicate;
    }

    public BigDecimal getAmountDifference() {
        return amountDifference;
    }

    public void setAmountDifference(BigDecimal amountDifference) {
        this.amountDifference = amountDifference;
    }

    public String getInvoiceTypeName() {
        if(this.invoiceType == null){
            return "";
        }
        switch (this.invoiceType) {
            case 4:
                return "专用发票";
            case 8:
                return "普通发票";
            case 26:
                return "机动车销售发票";
            default: return "";
        }

//        return EnumOutputInvoiceType.values()[this.invoiceType].getName();
    }
}