package pwc.taxtech.entity;

import org.hibernate.annotations.ColumnDefault;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.sql.Date;
import java.util.Objects;

import static pwc.taxtech.Const.DEF_BIG_STRING;
import static pwc.taxtech.Const.DEF_DEFAULT_DATE;
import static pwc.taxtech.Const.DEF_DEFAULT_STRING;

@Entity
public class Product {
    private String id;
    private String fYear;
    private String fSetId;
    private String fSetCode;
    private String fSetName;
    private String fManager;
    private String fStartYear;
    private String fStartMonth;
    private String fMonth;
    private String accountDepartment;
    private String productIDs;
    private Date createTime;

    @Id
    @Column(name = "ID", nullable = false, length = 128)
    public String getId() {
        return id;
    }

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

    @Basic
    @Column(name = "FYear", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getfYear() {
        return fYear;
    }

    public void setfYear(String fYear) {
        this.fYear = fYear;
    }

    @Basic
    @Column(name = "FSetID", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getfSetId() {
        return fSetId;
    }

    public void setfSetId(String fSetId) {
        this.fSetId = fSetId;
    }

    @Basic
    @Column(name = "FSetCode", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getfSetCode() {
        return fSetCode;
    }

    public void setfSetCode(String fSetCode) {
        this.fSetCode = fSetCode;
    }

    @Basic
    @Column(name = "FSetName", nullable = true, length = 200)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getfSetName() {
        return fSetName;
    }

    public void setfSetName(String fSetName) {
        this.fSetName = fSetName;
    }

    @Basic
    @Column(name = "FManager", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getfManager() {
        return fManager;
    }

    public void setfManager(String fManager) {
        this.fManager = fManager;
    }

    @Basic
    @Column(name = "FStartYear", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getfStartYear() {
        return fStartYear;
    }

    public void setfStartYear(String fStartYear) {
        this.fStartYear = fStartYear;
    }

    @Basic
    @Column(name = "FStartMonth", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getfStartMonth() {
        return fStartMonth;
    }

    public void setfStartMonth(String fStartMonth) {
        this.fStartMonth = fStartMonth;
    }

    @Basic
    @Column(name = "FMonth", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getfMonth() {
        return fMonth;
    }

    public void setfMonth(String fMonth) {
        this.fMonth = fMonth;
    }

    @Basic
    @Column(name = "AccountDepartment", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getAccountDepartment() {
        return accountDepartment;
    }

    public void setAccountDepartment(String accountDepartment) {
        this.accountDepartment = accountDepartment;
    }

    @Basic
    @Column(name = "ProductIDs", nullable = true, columnDefinition = DEF_BIG_STRING)
    public String getProductIDs() {
        return productIDs;
    }

    public void setProductIDs(String productIDs) {
        this.productIDs = productIDs;
    }

    @Basic
    @Column(name = "CreateTime", nullable = true, columnDefinition = DEF_DEFAULT_DATE)
    public Date getCreateTime() {
        return createTime;
    }

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Product product = (Product) o;
        return Objects.equals(id, product.id) &&
                Objects.equals(fYear, product.fYear) &&
                Objects.equals(fSetId, product.fSetId) &&
                Objects.equals(fSetCode, product.fSetCode) &&
                Objects.equals(fSetName, product.fSetName) &&
                Objects.equals(fManager, product.fManager) &&
                Objects.equals(fStartYear, product.fStartYear) &&
                Objects.equals(fStartMonth, product.fStartMonth) &&
                Objects.equals(fMonth, product.fMonth) &&
                Objects.equals(accountDepartment, product.accountDepartment) &&
                Objects.equals(productIDs, product.productIDs) &&
                Objects.equals(createTime, product.createTime);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, fYear, fSetId, fSetCode, fSetName, fManager, fStartYear, fStartMonth, fMonth, accountDepartment, productIDs, createTime);
    }
}