package com.eksad.masterdata.domain;

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

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

@Entity
@Table(name = "MST_PROMOAREA")
public class PromoArea implements EntityObject<PromoArea> {

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

    @NotNull(message = "promo Area id cannot be null")
    private String promoAreaID;

    @NotNull(message = "Area id cannot be null")
    private String areaID;

    @NotNull(message = "Ahass Name cannot be null")
    private String areaName;

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

    @Enumerated(EnumType.STRING)
    private DataStatus promoAreaStatus;

    @Embedded
    private CreationalSpecification promoAreaCreational;

    public PromoArea() {

    }

    public PromoArea(String promoAreaID, String areaID, String areaName, String promoID, DataStatus promoAreaStatus, CreationalSpecification promoAreaCreational) {
        this.promoAreaID = promoAreaID;
        this.areaID = areaID;
        this.areaName = areaName;
        this.promoID = promoID;
        this.promoAreaStatus = promoAreaStatus;
        this.promoAreaCreational = promoAreaCreational;
    }

    public String getPromoAreaID() {
        return promoAreaID;
    }

    public void setPromoAreaID(String promoAreaID) {
        this.promoAreaID = promoAreaID;
    }

    public String getAreaID() {
        return areaID;
    }

    public void setAreaID(String areaID) {
        this.areaID = areaID;
    }

    public String getPromoID() {
        return promoID;
    }

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

    public DataStatus getPromoAreaStatus() {
        return promoAreaStatus;
    }

    public void setPromoAreaStatus(DataStatus promoAreaStatus) {
        this.promoAreaStatus = promoAreaStatus;
    }

    public CreationalSpecification getPromoAreaCreational() {
        return promoAreaCreational;
    }

    public void setPromoAreaCreational(CreationalSpecification promoAreaCreational) {
        this.promoAreaCreational = promoAreaCreational;
    }

    public String getAreaName() {
        return areaName;
    }

    public void setAreaName(String areaName) {
        this.areaName = areaName;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 59 * hash + Objects.hashCode(this.id);
        hash = 59 * hash + Objects.hashCode(this.promoAreaID);
        hash = 59 * hash + Objects.hashCode(this.areaID);
        hash = 59 * hash + Objects.hashCode(this.areaName);
        hash = 59 * hash + Objects.hashCode(this.promoID);
        hash = 59 * hash + Objects.hashCode(this.promoAreaStatus);
        hash = 59 * hash + Objects.hashCode(this.promoAreaCreational);
        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 PromoArea other = (PromoArea) obj;
        if (!Objects.equals(this.promoAreaID, other.promoAreaID)) {
            return false;
        }
        if (!Objects.equals(this.areaID, other.areaID)) {
            return false;
        }
        if (!Objects.equals(this.areaName, other.areaName)) {
            return false;
        }
        if (!Objects.equals(this.promoID, other.promoID)) {
            return false;
        }
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        if (this.promoAreaStatus != other.promoAreaStatus) {
            return false;
        }
        if (!Objects.equals(this.promoAreaCreational, other.promoAreaCreational)) {
            return false;
        }
        return true;
    }


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