package com.eksad.masterdata.domain;

import com.eksad.ddms.common.util.object.EntityObject;
import com.eksad.ddms.common.util.status.DataStatus;
import com.eksad.masterdata.common.listEnum.PromoSource;
import jakarta.persistence.*;

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

@Entity
@Table(name = "MST_PROMOAHASS")
public class PromoAhass implements EntityObject<PromoAhass> {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    Integer id;

    @NotNull(message = "promoAhassID cannot be null")
    private String promoAhassID;

    @NotNull(message = "ahassID cannot be null")
    private String ahassID;

    @NotNull(message = "ahassName cannot be null")
    private String ahassName;

    @NotNull(message = "promoID cannot be null")
    private String promoID;

    @Enumerated(EnumType.STRING)
    private DataStatus promoAhassStatus;

    @Enumerated(EnumType.STRING)
    private PromoSource source;

    @Embedded
    private CreationalSpecification promoAhassCreational;

    public PromoAhass() {

    }

    public PromoAhass(String promoAhassID, String ahassID, String ahassName, String promoID, DataStatus promoAhassStatus, PromoSource source, CreationalSpecification promoAhassCreational) {
        this.promoAhassID = promoAhassID;
        this.ahassID = ahassID;
        this.ahassName = ahassName;
        this.promoID = promoID;
        this.promoAhassStatus = promoAhassStatus;
        this.source = source;
        this.promoAhassCreational = promoAhassCreational;
    }

    public DataStatus getPromoAhassStatus() {
        return promoAhassStatus;
    }

    public void setPromoAhassStatus(DataStatus promoAhassStatus) {
        this.promoAhassStatus = promoAhassStatus;
    }

    public CreationalSpecification getPromoAhassCreational() {
        return promoAhassCreational;
    }

    public void setPromoAhassCreational(CreationalSpecification promoAhassCreational) {
        this.promoAhassCreational = promoAhassCreational;
    }

    public PromoSource getSource() {
        return source;
    }

    public void setSource(PromoSource source) {
        this.source = source;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 79 * hash + Objects.hashCode(this.id);
        hash = 79 * hash + Objects.hashCode(this.promoAhassID);
        hash = 79 * hash + Objects.hashCode(this.ahassID);
        hash = 79 * hash + Objects.hashCode(this.ahassName);
        hash = 79 * hash + Objects.hashCode(this.promoID);
        hash = 79 * hash + Objects.hashCode(this.promoAhassStatus);
        hash = 79 * hash + Objects.hashCode(this.promoAhassCreational);
        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 PromoAhass other = (PromoAhass) obj;
        if (!Objects.equals(this.promoAhassID, other.promoAhassID)) {
            return false;
        }
        if (!Objects.equals(this.ahassID, other.ahassID)) {
            return false;
        }
        if (!Objects.equals(this.ahassName, other.ahassName)) {
            return false;
        }
        if (!Objects.equals(this.promoID, other.promoID)) {
            return false;
        }
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        if (this.promoAhassStatus != other.promoAhassStatus) {
            return false;
        }
        if (!Objects.equals(this.promoAhassCreational, other.promoAhassCreational)) {
            return false;
        }
        return true;
    }

    public Integer getId() {
        return id;
    }

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

    public String getPromoAhassID() {
        return promoAhassID;
    }

    public void setPromoAhassID(String promoAhassID) {
        this.promoAhassID = promoAhassID;
    }

    public String getAhassID() {
        return ahassID;
    }

    public void setAhassID(String ahassID) {
        this.ahassID = ahassID;
    }

    public String getAhassName() {
        return ahassName;
    }

    public void setAhassName(String ahassName) {
        this.ahassName = ahassName;
    }

    public String getPromoID() {
        return promoID;
    }

    public void setPromoID(String promoID) {
        this.promoID = promoID;
    }

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