package org.msh.etbm.db.entities;


import org.msh.etbm.commons.date.DateUtils;
import org.msh.etbm.db.WorkspaceEntity;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;

@Entity
@Table(name = "batch")
public class Batch extends WorkspaceEntity {

    @NotNull
    @Temporal(TemporalType.DATE)
    private Date expiryDate;

    @Column(length = 30)
    @NotNull
    private String batchNumber;

    @Column(length = 80)
    private String manufacturer;

    @ManyToOne
    @JoinColumn(name = "MEDICINE_ID")
    @NotNull
    private Medicine medicine;

    private double unitPrice;

    @Override
    public String getDisplayString() {
        return batchNumber +
                (manufacturer != null && !manufacturer.isEmpty() ? " - " + manufacturer : "");
    }

    /**
     * Check if batch is
     *
     * @return
     */
    public boolean isExpired() {
        return (expiryDate != null) && (expiryDate.before(DateUtils.getDate()));
    }


    @Override
    public String toString() {
        return batchNumber != null ? batchNumber : super.toString();
    }


    public void setContainerPrice(float containerPrice) {
        return;
    }

    public Medicine getMedicine() {
        return medicine;
    }

    public void setMedicine(Medicine medicine) {
        this.medicine = medicine;
    }

    public double getUnitPrice() {
        return unitPrice;
    }

    public String getBatchNumber() {
        return batchNumber;
    }

    public void setBatchNumber(String batchNumber) {
        this.batchNumber = batchNumber;
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }

    /**
     * @return the expiryDate
     */
    public Date getExpiryDate() {
        return expiryDate;
    }

    /**
     * @param expiryDate the expiryDate to set
     */
    public void setExpiryDate(Date expiryDate) {
        this.expiryDate = expiryDate;
    }

    /**
     * @param unitPrice the unitPrice to set
     */
    public void setUnitPrice(double unitPrice) {
        this.unitPrice = unitPrice;
    }

}
