package pwc.taxtech.atms.dto.vatdto;

import pwc.taxtech.atms.constant.enums.EnumInvoiceType;
import pwc.taxtech.atms.vat.entity.InputVatInvoice;

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

public class InputVATInvoiceDto extends InputVATInvoiceBaseDto {
    private String id;
    private int periodId;
    private String invoiceCode;
    private String invoiceNumber;
    private Date invoiceDate;
    private String sellerTaxNumber;
    private BigDecimal amount;
    private BigDecimal taxAmount;
    private String invoiceTypeName;
    private int invoiceType;
    private String certificationResult;
    private Date certificationDate;
    private String creatorId;
    private Date createTime;
    private boolean isDuplicate;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getPeriodId() {
        return periodId;
    }

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

    public String getInvoiceCode() {
        return invoiceCode;
    }

    public void setInvoiceCode(String invoiceCode) {
        this.invoiceCode = invoiceCode;
    }

    public String getInvoiceNumber() {
        return invoiceNumber;
    }

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

    public Date getInvoiceDate() {
        return invoiceDate;
    }

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

    public String getSellerTaxNumber() {
        return sellerTaxNumber;
    }

    public void setSellerTaxNumber(String sellerTaxNumber) {
        this.sellerTaxNumber = sellerTaxNumber;
    }

    public BigDecimal getAmount() {
        return amount;
    }

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

    public BigDecimal getTaxAmount() {
        return taxAmount;
    }

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

    public int getInvoiceType() {
        return invoiceType;
    }

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

    public String getCertificationResult() {
        return certificationResult;
    }

    public void setCertificationResult(String certificationResult) {
        this.certificationResult = certificationResult;
    }

    public Date getCertificationDate() {
        return certificationDate;
    }

    public void setCertificationDate(Date certificationDate) {
        this.certificationDate = certificationDate;
    }

    public String getCreatorId() {
        return creatorId;
    }

    public void setCreatorId(String creatorId) {
        this.creatorId = creatorId;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public boolean isDuplicate() {
        return isDuplicate;
    }

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

    public String getInvoiceTypeName() {
        return EnumInvoiceType.values()[this.invoiceType].getName();
    }

    public InputVatInvoice extractInvoice() {
        InputVatInvoice invoice = new InputVatInvoice();
        invoice.setId(getId());
        invoice.setPeriodId(getPeriodId());
        invoice.setInvoiceCode(getInvoiceCode());
        invoice.setInvoiceNumber(getInvoiceNumber());
        invoice.setInvoiceDate(getInvoiceDate());
        invoice.setSellerTaxNumber(getSellerTaxNumber());
        invoice.setAmount(getAmount());
        invoice.setTaxAmount(getTaxAmount());
        invoice.setInvoiceType(getInvoiceType());
        invoice.setCertificationResult(getCertificationResult());
        invoice.setCertificationDate(getCertificationDate());
        invoice.setCreatorId(getCreatorId());
        invoice.setCreateTime(getCreateTime());
//        invoice.setStatus(getStatus());
//        invoice.setPartAccntedPeriod(getPartAccntedPeriod());
//        invoice.setAccntedPeriod(getAccntedPeriod());
        return invoice;
    }
}