package com.eksad.masterdata.domain;

import com.eksad.ddms.common.util.object.EntityObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.persistence.*;

import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.Objects;

@Entity
@Table(name = "TRX_PAYMENT_ORAFIN")
public class PaymentOrafin implements EntityObject<PaymentOrafin> {
    @Id
    @GeneratedValue(generator = "trx_payment_orafin_gen")
    @SequenceGenerator(name = "trx_payment_orafin_gen", sequenceName = "trx_payment_orafin_seq")
    Integer id;

    @Version
    @Column(name = "version")
    private Long version;

    @Column(unique = true)
    @NotNull(message = "paymentOrafinID cannot be null")
    private String paymentOrafinID;
    private String woID;
    private String noKwitansi;
    private String reqPayload;
    private String resPayload;
    @Temporal(TemporalType.DATE)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MMM-yy", timezone = "Asia/Jakarta")
    private Date kwitansiDate;
    private String orafinStatus;
    @Embedded
    private CreationalSpecification paymentOrafinCreational;

    public PaymentOrafin() {
    }

    public PaymentOrafin(String woID, Long version, String noKwitansi, String reqPayload, String resPayload, String paymentOrafinID, Date kwitansiDate, CreationalSpecification paymentOrafinCreational) {
        this.woID = woID;
        this.noKwitansi = noKwitansi;
        this.reqPayload = reqPayload;
        this.resPayload = resPayload;
        this.paymentOrafinID = paymentOrafinID;
        this.kwitansiDate = kwitansiDate;
        this.paymentOrafinCreational = paymentOrafinCreational;
    }

    public Integer getId() {
        return id;
    }

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

    public String getWoID() {
        return woID;
    }

    public void setWoID(String woID) {
        this.woID = woID;
    }

    public String getNoKwitansi() {
        return noKwitansi;
    }

    public void setNoKwitansi(String noKwitansi) {
        this.noKwitansi = noKwitansi;
    }

    public String getReqPayload() {
        return reqPayload;
    }

    public void setReqPayload(String reqPayload) {
        this.reqPayload = reqPayload;
    }

    public String getResPayload() {
        return resPayload;
    }

    public void setResPayload(String resPayload) {
        this.resPayload = resPayload;
    }

    public String getPaymentOrafinID() {
        return paymentOrafinID;
    }

    public void setPaymentOrafinID(String paymentOrafinID) {
        this.paymentOrafinID = paymentOrafinID;
    }

    public Date getKwitansiDate() {
        return kwitansiDate;
    }

    public void setKwitansiDate(Date kwitansiDate) {
        this.kwitansiDate = kwitansiDate;
    }

    public Long getVersion() {
        return version;
    }

    public void setVersion(Long version) {
        this.version = version;
    }

    public String getOrafinStatus() {
        return orafinStatus;
    }

    public void setOrafinStatus(String orafinStatus) {
        this.orafinStatus = orafinStatus;
    }

    public CreationalSpecification getPaymentOrafinCreational() {
        return paymentOrafinCreational;
    }

    public void setPaymentOrafinCreational(CreationalSpecification paymentOrafinCreational) {
        this.paymentOrafinCreational = paymentOrafinCreational;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 79 * hash + Objects.hashCode(this.woID);
        hash = 79 * hash + Objects.hashCode(this.version);
        hash = 79 * hash + Objects.hashCode(this.paymentOrafinID);
        hash = 79 * hash + Objects.hashCode(this.noKwitansi);
        hash = 79 * hash + Objects.hashCode(this.reqPayload);
        hash = 79 * hash + Objects.hashCode(this.resPayload);
        hash = 79 * hash + Objects.hashCode(this.kwitansiDate);
        hash = 79 * hash + Objects.hashCode(this.paymentOrafinCreational);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final PaymentOrafin other = (PaymentOrafin) obj;
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        return true;
    }

    @Override
    public boolean sameIdentityAs(PaymentOrafin t) {
        return this.equals(t);
    }
}