package edu.ncsu.csc.itrust.beans;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * A bean for storing data about a prescription.
 * 
 * A bean's purpose is to store data. Period. Little or no functionality is to be added to a bean 
 * (with the exception of minor formatting such as concatenating phone numbers together). 
 * A bean must only have Getters and Setters (Eclipse Hint: Use Source > Generate Getters and Setters.
 * to create these easily)
 */
public class PrescriptionBean {
	private long id = 0L;
	private MedicationBean medication = new MedicationBean();
	private long visitID = 0L;
	private String startDateStr = new SimpleDateFormat("MM/dd/yyyy").format(new Date());
	private String endDateStr = new SimpleDateFormat("MM/dd/yyyy").format(new Date());
	private int dosage = 0;
	private String instructions = "";
	private List<OverrideReasonBean> reasons = null;
	private String overrideReasonOther = "";
	public PrescriptionBean() {
	}

	@Override
	public boolean equals(Object other) {
		return (other != null) && this.getClass().equals(other.getClass())
				&& this.equals((PrescriptionBean) other);
	}

	/**
	 * @param other
	 * @return
	 */
	private boolean equals(PrescriptionBean other) {
		return (medication == other.medication || (medication != null && medication.equals(other.medication)))
				&& visitID == other.visitID
				&& startDateStr.equals(other.startDateStr)
				&& endDateStr.equals(other.endDateStr)
				&& dosage == other.dosage
				&& instructions.equals(other.instructions);
	}

	@Override
	public int hashCode() {
		return 42; // any arbitrary constant will do
	}
/**
 * getters and setters for dosage,
 * reason, override reason
 */
	public int getDosage() {
		return dosage;
	}

	public void setDosage(int dosage) {
		this.dosage = dosage;
	}
	
	public List<OverrideReasonBean> getReasons() {
		if (reasons==null){
			reasons = new ArrayList<OverrideReasonBean>();
		}
		return reasons;
	}

	public void setReasons(List<OverrideReasonBean> reasons) {
		this.reasons = reasons;
	}
	
	public void addReason(OverrideReasonBean reason){
		if(reasons == null){
			reasons = new ArrayList<OverrideReasonBean>();
		}
		reasons.add(reason);
	}

	public Date getEndDate() {
		try {
			return new SimpleDateFormat("MM/dd/yyyy").parse(endDateStr);
		} catch (java.text.ParseException e) {
			return null;
		}
	}

	public void setEndDateStr(String endDate) {
		this.endDateStr = endDate;
	}

	public void setEndDate(Date endDate) {
		this.endDateStr = new SimpleDateFormat("MM/dd/yyyy").format(endDate);
	}

	public String getInstructions() {
		return instructions;
	}

	public void setInstructions(String instruction) {
		this.instructions = instruction;
	}

	public MedicationBean getMedication() {
		return medication;
	}

	public void setMedication(MedicationBean medication) {
		this.medication = medication;
	}

	public Date getStartDate() {
		try {
			return new SimpleDateFormat("MM/dd/yyyy").parse(startDateStr);
		} catch (ParseException e) {
			return null;
		}
	}

	public String getStartDateStr() {
		return startDateStr;
	}

	public String getEndDateStr() {
		return endDateStr;
	}

	public void setStartDateStr(String startDate) {
		this.startDateStr = startDate;
	}

	public long getVisitID() {
		return visitID;
	}

	public void setVisitID(long visitID) {
		this.visitID = visitID;
	}

	public long getId() {
		return id;
	}

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

	public String getOverrideReasonOther() {
		return overrideReasonOther;
	}

	public void setOverrideReasonOther(String overrideReasonOther) {
		this.overrideReasonOther = overrideReasonOther;
	}


}