package com.eksad.masterdata.domain;

import com.eksad.ddms.common.util.object.EntityObject;
import com.eksad.masterdata.common.listEnum.ContractServiceEvent;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.persistence.*;
import org.hibernate.validator.constraints.NotEmpty;

import java.util.Date;

@Entity
@Table(name = "TRX_CS_MONITORING")
public class CSMonitoring implements EntityObject<CSMonitoring> {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trx_cs_monitoring_gen")
    @SequenceGenerator(name = "trx_cs_monitoring_gen", sequenceName = "trx_cs_monitoring_seq", allocationSize = 1)
    private Integer id;

    @NotEmpty(message = "cs id cannot be null")
    private String csID;

    @NotEmpty(message = "nosin cannot be null")
    private String nosin;

    @Temporal(TemporalType.TIMESTAMP)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss")
    private Date tglTransaksi;

    @Column(name = "log", columnDefinition = "TEXT")
    private String log;

    @Enumerated(value = EnumType.STRING)
    private ContractServiceEvent event;

    private String reffID;

    private String packageID;

    @Embedded
    private CreationalSpecification csMonitoringCreationalSpecification;

    public CSMonitoring() {
    }

    public CSMonitoring(Integer id, String csID, String nosin, Date tglTransaksi, String log, ContractServiceEvent event, String reffID, String packageID, CreationalSpecification csMonitoringCreationalSpecification) {
        this.id = id;
        this.csID = csID;
        this.nosin = nosin;
        this.tglTransaksi = tglTransaksi;
        this.log = log;
        this.event = event;
        this.reffID = reffID;
        this.packageID = packageID;
        this.csMonitoringCreationalSpecification = csMonitoringCreationalSpecification;
    }

    public Integer getId() {
        return id;
    }

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

    public String getCsID() {
        return csID;
    }

    public void setCsID(String csID) {
        this.csID = csID;
    }

    public String getNosin() {
        return nosin;
    }

    public void setNosin(String nosin) {
        this.nosin = nosin;
    }

    public Date getTglTransaksi() {
        return tglTransaksi;
    }

    public void setTglTransaksi(Date tglTransaksi) {
        this.tglTransaksi = tglTransaksi;
    }

    public String getLog() {
        return log;
    }

    public void setLog(String log) {
        this.log = log;
    }

    public ContractServiceEvent getEvent() {
        return event;
    }

    public void setEvent(ContractServiceEvent event) {
        this.event = event;
    }

    public String getReffID() {
        return reffID;
    }

    public void setReffID(String reffID) {
        this.reffID = reffID;
    }

    public String getPackageID() {
        return packageID;
    }

    public void setPackageID(String packageID) {
        this.packageID = packageID;
    }

    public CreationalSpecification getCsMonitoringCreationalSpecification() {
        return csMonitoringCreationalSpecification;
    }

    public void setCsMonitoringCreationalSpecification(CreationalSpecification csMonitoringCreationalSpecification) {
        this.csMonitoringCreationalSpecification = csMonitoringCreationalSpecification;
    }

    @Override
    public boolean sameIdentityAs(CSMonitoring other) {
        return other.equals(this);
    }
}