package edu.cmu.lti.bic.sbs.ui;
//import java.time.LocalTime;
import java.awt.EventQueue;
import java.util.Calendar;
import java.util.HashMap;
import edu.cmu.lti.bic.sbs.engine.Engine;
import edu.cmu.lti.bic.sbs.gson.Drug;
import edu.cmu.lti.bic.sbs.gson.Patient;
import edu.cmu.lti.bic.sbs.gson.Prescription;
import edu.cmu.lti.bic.sbs.gson.Tool;
public class UserInterface {
private Engine decisionEngine;
private MainWindow window;
private ReportWindow reportWindow;
private HashMap<String, Tool> toolMap;
private HashMap<String, Drug> drugMap;
private UserInterface ui = this;
/**
* initialize the user interface controller and connect it with decision
* engine
*
* @param decisionEngine
* the decision engine it's connected to
* @throws Exception
*/
public UserInterface(Engine decisionEngine) throws Exception {
this.decisionEngine = decisionEngine;
this.toolMap = new HashMap<String, Tool>();
this.drugMap = new HashMap<String, Drug>();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
window = new MainWindow(ui);
window.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public void callCode(String code) {
// decisionEngine.callCode(code);
ui.addPathography("Code Blue!");
try {
decisionEngine.useTool("codeblue");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Sound.play("alarm");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void connectMonitor() {
decisionEngine.connectMonitor();
ui.addPathography("Monitor connected!");
}
public void useTool(String id) {
try {
decisionEngine.useTool(id);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void useDrug(String id, Double dose, String unit) {
assert (id != null);
try {
decisionEngine.useDrug(id, dose, unit);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ui.addPathography("used a drug!");
window.closeDrugWindow();
}
public void setPatientInfo(final Patient patient) {
assert (patient != null);
EventQueue.invokeLater(new Runnable() {
public void run() {
window.setPatient(patient.getBasic(), patient.getDescription());
}
});
}
public void addDrug(final Drug drug) {
assert (drug != null);
drugMap.put(drug.getId(), drug);
}
public void addDrug(Drug[] drugMap){
for(Drug d:drugMap){
addDrug(d);
}
}
public void addTool(Tool tool) {
assert (tool != null);
toolMap.put(tool.getId(), tool);
EventQueue.invokeLater(new Runnable() {
public void run() {
window.addTool(tool.getId(), tool.getName());
}
});
}
public void addTools(Tool[] tools) {
for (Tool tool: tools) {
addTool(tool);
}
}
public void updateReport(Double score, String report) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
if (reportWindow == null)
reportWindow = new ReportWindow();
reportWindow.setScore(score.toString());
reportWindow.setContent(report);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public void updateMonitor(Patient p) {
assert (p != null);
assert (p.getBloodPressure() != null);
assert (p.getHeartRate() != null);
assert (p.getOxygenLevel() != null);
assert (p.getRepirationRate() != null);
EventQueue.invokeLater(new Runnable() {
public void run() {
window.setMonitor(p.getBloodPressure().getDiastolicBloodPressure(), p
.getBloodPressure().getSystolicBloodPressure(), p.getHeartRate()
.getHrNum(), p.getOxygenLevel().getOlNum(), p.getRepirationRate()
.getRrNum());
}
});
}
public void updateTime(Calendar time) {
assert (time != null);
EventQueue.invokeLater(new Runnable() {
public void run() {
window.updateClock(time.get(Calendar.HOUR_OF_DAY),
time.get(Calendar.MINUTE), time.get(Calendar.SECOND));
}
});
}
public void addPathography(String feedback) {
assert (feedback != null);
EventQueue.invokeLater(new Runnable() {
public void run() {
window.addPathography(feedback);
}
});
}
public HashMap<String,Drug> getDrugMap(){
System.out.println(drugMap);
return drugMap;
}
}