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.PickSlipDetailStatusType;
import jakarta.persistence.*;

import java.util.Objects;

@Entity
@Table(name = "TRX_PICKSLIPDETAIL")
public class PickSlipDetail implements EntityObject<PickSlipDetail> {

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

    private String code;
    private String partID;
    private Integer locatorID;
    private Integer qty;
    private Integer actualQty;

    @Enumerated(EnumType.STRING)
    private PickSlipDetailStatusType pickSlipDetailStatusType;

    @Enumerated(EnumType.STRING)
    private DataStatus pickSlipDetailDataStatus;

    @Embedded
    private CreationalSpecification pickSlipDetailCreational;

    private Integer pickSlipNumber;


    public PickSlipDetail() {
    }

    public PickSlipDetail(String code, String partID, Integer locatorID, Integer qty, Integer actualQty, PickSlipDetailStatusType pickSlipDetailStatusType, DataStatus pickSlipDetailDataStatus, CreationalSpecification pickSlipDetailCreational) {
        this.code = code;
        this.partID = partID;
        this.locatorID = locatorID;
        this.qty = qty;
        this.actualQty = actualQty;
        this.pickSlipDetailStatusType = pickSlipDetailStatusType;
        this.pickSlipDetailDataStatus = pickSlipDetailDataStatus;
        this.pickSlipDetailCreational = pickSlipDetailCreational;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getPartID() {
        return partID;
    }

    public void setPartID(String partID) {
        this.partID = partID;
    }

    public Integer getLocatorID() {
        return locatorID;
    }

    public void setLocatorID(Integer locatorID) {
        this.locatorID = locatorID;
    }

    public Integer getActualQty() {
        return actualQty;
    }

    public void setActualQty(Integer actualQty) {
        this.actualQty = actualQty;
    }

    public DataStatus getPickSlipDetailDataStatus() {
        return pickSlipDetailDataStatus;
    }

    public void setPickSlipDetailDataStatus(DataStatus pickSlipDetailDataStatus) {
        this.pickSlipDetailDataStatus = pickSlipDetailDataStatus;
    }

    public Integer getId() {
        return id;
    }

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

    public Integer getQty() {
        return qty;
    }

    public void setQty(Integer qty) {
        this.qty = qty;
    }

    public CreationalSpecification getPickSlipDetailCreational() {
        return pickSlipDetailCreational;
    }

    public void setPickSlipDetailCreational(CreationalSpecification pickSlipDetailCreational) {
        this.pickSlipDetailCreational = pickSlipDetailCreational;
    }

    public PickSlipDetailStatusType getPickSlipDetailStatusType() {
        return pickSlipDetailStatusType;
    }

    public void setPickSlipDetailStatusType(PickSlipDetailStatusType pickSlipDetailStatusType) {
        this.pickSlipDetailStatusType = pickSlipDetailStatusType;
    }

    public Integer getPickSlipNumber() {
        return pickSlipNumber;
    }

    public void setPickSlipNumber(Integer pickSlipNumber) {
        this.pickSlipNumber = pickSlipNumber;
    }


    @Override
    public int hashCode() {
        int hash = 7;
        hash = 37 * hash + Objects.hashCode(this.code);
        hash = 37 * hash + Objects.hashCode(this.partID);
        hash = 37 * hash + Objects.hashCode(this.locatorID);
        hash = 37 * hash + Objects.hashCode(this.qty);
        hash = 37 * hash + Objects.hashCode(this.actualQty);
        hash = 37 * hash + Objects.hashCode(this.pickSlipDetailStatusType);
        hash = 37 * hash + Objects.hashCode(this.pickSlipDetailDataStatus);
        hash = 37 * hash + Objects.hashCode(this.pickSlipDetailCreational);
        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 PickSlipDetail other = (PickSlipDetail) obj;
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        return true;
    }

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