diff --git a/src/main/java/org/codedifferently/Main.java b/src/main/java/org/codedifferently/Main.java
deleted file mode 100644
index 435139b..0000000
--- a/src/main/java/org/codedifferently/Main.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.codedifferently;
-
-//TIP To Run code, press or
-// click the icon in the gutter.
-public class Main {
- public static void main(String[] args) {
- //TIP Press with your caret at the highlighted text
- // to see how IntelliJ IDEA suggests fixing it.
- System.out.printf("Hello and welcome!");
-
- for (int i = 1; i <= 5; i++) {
- //TIP Press to start debugging your code. We have set one breakpoint
- // for you, but you can always add more by pressing .
- System.out.println("i = " + i);
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/org/codedifferently/christopherbennett/Main.java b/src/main/java/org/codedifferently/christopherbennett/Main.java
new file mode 100644
index 0000000..bfcc934
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/Main.java
@@ -0,0 +1,12 @@
+package org.codedifferently.christopherbennett;
+
+import org.codedifferently.christopherbennett.menus.MainMenu;
+
+//TIP To Run code, press or
+// click the icon in the gutter.
+public class Main {
+ public static void main(String[] args) {
+ MainMenu mainMenu = new MainMenu();
+ mainMenu.promptMainMenu();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/org/codedifferently/christopherbennett/MaintenanceOffice.java b/src/main/java/org/codedifferently/christopherbennett/MaintenanceOffice.java
new file mode 100644
index 0000000..0edc676
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/MaintenanceOffice.java
@@ -0,0 +1,61 @@
+package org.codedifferently.christopherbennett;
+
+import org.codedifferently.christopherbennett.data.MaintenanceRequest;
+import org.codedifferently.christopherbennett.data.Technician;
+import org.codedifferently.christopherbennett.enums.EActivity;
+import org.codedifferently.christopherbennett.enums.EStatusUpdate;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+public class MaintenanceOffice {
+
+ public void assignTechs(List requests, List techs) {
+
+ //Sort requests by severity
+ requests.sort(Comparator.comparing(MaintenanceRequest::getSeverity).reversed());
+
+ //Sort techs by highest level of seniority.
+ techs.sort(Comparator.comparing(Technician::getProfessionLevel).reversed());
+
+ int techCounter = 0;
+ int requestCounter = 0;
+ while(techCounter < techs.size() && requestCounter < requests.size()) {
+
+ //ignore already done requests
+ if(requests.get(techCounter).getStatus() == EStatusUpdate.DONE) {
+ requestCounter++;
+ continue;
+ }
+
+ //print statement
+ System.out.println("[" + requests.get(requestCounter).getApartmentNumber()
+ + "] Severity "
+ + requests.get(requestCounter).getSeverity()
+ + " -> Assigned to " + techs.get(techCounter).getName());
+
+ //update statuses
+ requests.get(requestCounter).setStatus(EStatusUpdate.INPROGRESS);
+ techs.get(techCounter).setActivity(EActivity.Working);
+
+ techs.get(techCounter).setRequest(requests.get(requestCounter));
+
+ //Increment request and tech counters;
+ requestCounter++;
+ techCounter++;
+ }
+ System.out.println();
+ }
+
+ public void techCompleteTasks(List techs) {
+ for(int i = 0; i < techs.size(); i++) {
+ techs.get(i).setActivity(EActivity.Idle);
+
+ if(techs.get(i).getRequest() != null) {
+ techs.get(i).getRequest().setStatus(EStatusUpdate.DONE);
+ }
+
+ }
+ }
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/data/MaintenanceRequest.java b/src/main/java/org/codedifferently/christopherbennett/data/MaintenanceRequest.java
new file mode 100644
index 0000000..1186aa2
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/data/MaintenanceRequest.java
@@ -0,0 +1,64 @@
+package org.codedifferently.christopherbennett.data;
+
+import org.codedifferently.christopherbennett.enums.EIssueType;
+import org.codedifferently.christopherbennett.enums.EStatusUpdate;
+
+public class MaintenanceRequest {
+ private String tenantName;
+ private String apartmentNumber;
+ private EIssueType issueType;
+ private int severity;
+ private EStatusUpdate status = EStatusUpdate.NEW;
+
+
+ public MaintenanceRequest(String tenantName, String apartmentNumber, EIssueType issueType, int severity) {
+ this.tenantName = tenantName;
+ this.apartmentNumber = apartmentNumber;
+ this.issueType = issueType;
+ this.severity = severity;
+ }
+
+ public String getTenantName() {
+ return tenantName;
+ }
+
+ public void setTenantName(String tenantName) {
+ this.tenantName = tenantName;
+ }
+
+ public String getApartmentNumber() {
+ return apartmentNumber;
+ }
+
+ public void setApartmentNumber(String apartmentNumber) {
+ this.apartmentNumber = apartmentNumber;
+ }
+
+ public EIssueType getIssueType() {
+ return issueType;
+ }
+
+ public void setIssueType(EIssueType issueType) {
+ this.issueType = issueType;
+ }
+
+ public int getSeverity() {
+ return severity;
+ }
+
+ public void setSeverity(int severity) {
+ if(severity > 5) {
+ System.out.println("Max severity is 5!!");
+ severity = 5;
+ }
+ this.severity = severity;
+ }
+
+ public EStatusUpdate getStatus() {
+ return status;
+ }
+
+ public void setStatus(EStatusUpdate status) {
+ this.status = status;
+ }
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/data/Technician.java b/src/main/java/org/codedifferently/christopherbennett/data/Technician.java
new file mode 100644
index 0000000..a307a20
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/data/Technician.java
@@ -0,0 +1,48 @@
+package org.codedifferently.christopherbennett.data;
+
+import org.codedifferently.christopherbennett.enums.EActivity;
+import org.codedifferently.christopherbennett.enums.EProfessionLevel;
+
+public class Technician {
+ private String name;
+ private int age;
+ private EProfessionLevel professionLevel;
+ private EActivity activity;
+ private MaintenanceRequest request;
+
+
+ public Technician(String name, int age, EProfessionLevel professionLevel, EActivity activity) {
+ this.name = name;
+ this.age = age;
+ this.professionLevel = professionLevel;
+ this.activity = activity;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public EProfessionLevel getProfessionLevel() {
+ return professionLevel;
+ }
+
+ public EActivity getActivity() {
+ return activity;
+ }
+
+ public void setActivity(EActivity activity) {
+ this.activity = activity;
+ }
+
+ public void setRequest(MaintenanceRequest request) {
+ this.request = request;
+ }
+
+ public MaintenanceRequest getRequest() {
+ return request;
+ }
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/data/UpdateRequest.java b/src/main/java/org/codedifferently/christopherbennett/data/UpdateRequest.java
new file mode 100644
index 0000000..1f1020a
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/data/UpdateRequest.java
@@ -0,0 +1,24 @@
+package org.codedifferently.christopherbennett.data;
+
+import java.util.List;
+
+public class UpdateRequest {
+ List technicianList;
+ List maintenanceRequestList;
+
+ public List getMaintenanceRequestList() {
+ return maintenanceRequestList;
+ }
+
+ public List getTechnicianList() {
+ return technicianList;
+ }
+
+ public void setTechnicianList(List technicianList) {
+ this.technicianList = technicianList;
+ }
+
+ public void setMaintenanceRequestList(List maintenanceRequestList) {
+ this.maintenanceRequestList = maintenanceRequestList;
+ }
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/enums/EActivity.java b/src/main/java/org/codedifferently/christopherbennett/enums/EActivity.java
new file mode 100644
index 0000000..00aa818
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/enums/EActivity.java
@@ -0,0 +1,7 @@
+package org.codedifferently.christopherbennett.enums;
+
+public enum EActivity {
+ Idle,
+ Working,
+ OnBreak,
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/enums/EIssueType.java b/src/main/java/org/codedifferently/christopherbennett/enums/EIssueType.java
new file mode 100644
index 0000000..ef163c2
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/enums/EIssueType.java
@@ -0,0 +1,8 @@
+package org.codedifferently.christopherbennett.enums;
+
+public enum EIssueType {
+ Electrical,
+ Plumbing,
+ HVAC,
+ Other
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/enums/EProfessionLevel.java b/src/main/java/org/codedifferently/christopherbennett/enums/EProfessionLevel.java
new file mode 100644
index 0000000..87e0511
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/enums/EProfessionLevel.java
@@ -0,0 +1,7 @@
+package org.codedifferently.christopherbennett.enums;
+
+public enum EProfessionLevel {
+ Junior,
+ MidLevel,
+ Senior
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/enums/EStatusUpdate.java b/src/main/java/org/codedifferently/christopherbennett/enums/EStatusUpdate.java
new file mode 100644
index 0000000..766a4d2
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/enums/EStatusUpdate.java
@@ -0,0 +1,7 @@
+package org.codedifferently.christopherbennett.enums;
+
+public enum EStatusUpdate {
+ NEW,
+ INPROGRESS,
+ DONE
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/helpers/InputHandler.java b/src/main/java/org/codedifferently/christopherbennett/helpers/InputHandler.java
new file mode 100644
index 0000000..0135df9
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/helpers/InputHandler.java
@@ -0,0 +1,76 @@
+package org.codedifferently.christopherbennett.helpers;
+
+import org.codedifferently.christopherbennett.enums.EIssueType;
+
+import java.util.Scanner;
+
+public class InputHandler {
+
+ public static int handleIntegerInput() {
+ Scanner scan = new Scanner(System.in);
+ int scanInput = 0;
+ boolean validScanInput = false;
+ //While loop to make sure user puts in the correct input
+ while(!validScanInput) {
+ //Call Scanner methods
+ try {
+ //Scanner method to collect input
+ scanInput = scan.nextInt();
+ validScanInput = true;
+ }
+ catch (Exception e) {
+ //If user enters invalid input, the catch block will prevent errors.
+ System.out.println("Invalid input! Try typing a number instead of a String!");
+ scan.next();
+ }
+ }
+ return scanInput;
+ }
+
+ public static String handleStringInput() {
+ Scanner scan = new Scanner(System.in);
+ String scanInput = "";
+ boolean validScanInput = false;
+ //While loop to make sure user puts in the correct input
+ while(!validScanInput) {
+ //Call Scanner methods
+ try {
+ //Scanner method to collect input
+ scanInput = scan.nextLine();
+ validScanInput = true;
+ }
+ catch (Exception e) {
+ //If user enters invalid input, the catch block will prevent errors.
+ System.out.println("Invalid input! Try typing a valid String!");
+ scan.next();
+ }
+ }
+ return scanInput;
+ }
+
+ public static EIssueType handleEnumInput(EIssueType[] validOptions) {
+ Scanner scan = new Scanner(System.in);
+ EIssueType result = null;
+
+ while (result == null) {
+ String scanInput = scan.nextLine().trim();
+
+ for (int i = 0; i < validOptions.length; i++) {
+ if (scanInput.equalsIgnoreCase(validOptions[i].name())) {
+ result = validOptions[i];
+ break;
+ }
+ }
+
+ if (result == null) {
+ System.out.println("Invalid input! Valid options are:");
+ for (EIssueType option : validOptions) {
+ System.out.println(" - " + option.name());
+ }
+ }
+ }
+
+ return result;
+ }
+
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/menus/MainMenu.java b/src/main/java/org/codedifferently/christopherbennett/menus/MainMenu.java
new file mode 100644
index 0000000..eb7a069
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/menus/MainMenu.java
@@ -0,0 +1,80 @@
+package org.codedifferently.christopherbennett.menus;
+
+import org.codedifferently.christopherbennett.MaintenanceOffice;
+import org.codedifferently.christopherbennett.data.MaintenanceRequest;
+import org.codedifferently.christopherbennett.data.Technician;
+import org.codedifferently.christopherbennett.enums.EActivity;
+import org.codedifferently.christopherbennett.enums.EProfessionLevel;
+import org.codedifferently.christopherbennett.helpers.InputHandler;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MainMenu {
+
+ private ArrayList technicians;
+ private ArrayList requests;
+
+ public void promptMainMenu() {
+
+ //Initialization
+ initializeFields();
+ boolean inMainMenu = true;
+
+ //Initialize Menus
+ RequestMenu requestMenu = new RequestMenu();
+ TechMenu techMenu = new TechMenu();
+ ReportMenu reportMenu = new ReportMenu();
+ MaintenanceOffice maintenanceOffice = new MaintenanceOffice();
+
+ //Main Loop
+ while(inMainMenu) {
+ System.out.println("===== MAINTENANCE REQUEST TRACKER =====\n");
+ System.out.println("1. Add New Request");
+ System.out.println("2. Monitor Technicians");
+ System.out.println("3. Daily Report");
+ System.out.println("4. Exit");
+
+ int inputCode = InputHandler.handleIntegerInput();
+
+ switch(inputCode) {
+ case 1:
+ //Add all new requests once finished
+ List newRequests = requestMenu.promptRequestMenu();
+ requests.addAll(newRequests);
+ maintenanceOffice.assignTechs(requests, technicians);
+ break;
+ case 2:
+ techMenu.promptTechMenu(technicians, requests);
+ maintenanceOffice.techCompleteTasks(technicians);
+ break;
+ case 3:
+ reportMenu.promptReportMenu(requests);
+ break;
+ case 4:
+ System.out.println("Have a nice day!");
+ inMainMenu = false;
+ break;
+ default:
+ System.out.println("Not a valid Integer Input!");
+ break;
+ }
+ }
+ }
+
+
+ public void initializeFields() {
+ Technician tech1 = new Technician("Jordan", 34, EProfessionLevel.Senior, EActivity.Idle);
+ Technician tech2 = new Technician("Coreye'", 25, EProfessionLevel.MidLevel, EActivity.OnBreak);
+ Technician tech3 = new Technician("Glenn", 27, EProfessionLevel.Junior, EActivity.Working);
+ Technician tech4 = new Technician("Bryant", 24, EProfessionLevel.Junior, EActivity.Idle);
+
+ technicians = new ArrayList<>();
+ technicians.add(tech1);
+ technicians.add(tech2);
+ technicians.add(tech3);
+ technicians.add(tech4);
+
+ requests = new ArrayList<>();
+ }
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/menus/ReportMenu.java b/src/main/java/org/codedifferently/christopherbennett/menus/ReportMenu.java
new file mode 100644
index 0000000..9b5890c
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/menus/ReportMenu.java
@@ -0,0 +1,78 @@
+package org.codedifferently.christopherbennett.menus;
+
+import org.codedifferently.christopherbennett.data.MaintenanceRequest;
+import org.codedifferently.christopherbennett.enums.EIssueType;
+import org.codedifferently.christopherbennett.enums.EStatusUpdate;
+import org.codedifferently.christopherbennett.helpers.InputHandler;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+
+public class ReportMenu {
+ public void promptReportMenu(List requests) {
+ System.out.println("===== DAILY REPORT =====\n");
+
+ System.out.println("Total Requests: " + requests.size());
+ int openCounter = 0;
+ int closedCounter = 0;
+ int lowSeverityCount = 0;
+ int highSeverityCount = 0;
+
+ HashMap commonCountMap = new HashMap();
+
+ for(int i = 0; i < requests.size(); i++) {
+ MaintenanceRequest request = requests.get(i);
+
+ if(request.getStatus() == EStatusUpdate.DONE) {
+ closedCounter++;
+ }
+ else {
+ openCounter++;
+ }
+
+ if(request.getSeverity() >= 4) {
+ highSeverityCount++;
+ }
+ else {
+ lowSeverityCount++;
+ }
+
+ //update hashMap
+ if(commonCountMap.containsKey(request.getIssueType())) {
+ commonCountMap.put(request.getIssueType(), commonCountMap.get(request.getIssueType()) + 1);
+ }
+ else {
+ commonCountMap.put(request.getIssueType(), 1);
+ }
+ }
+
+ int maxIssueCount = 0;
+ EIssueType mostCommonIssue = EIssueType.Other;
+
+ //max pattern for EIssueType
+ for(EIssueType eIssueType : commonCountMap.keySet()) {
+
+ if(commonCountMap.get(eIssueType) > maxIssueCount) {
+ maxIssueCount = commonCountMap.get(eIssueType);
+ mostCommonIssue = eIssueType;
+ }
+
+ }
+
+ System.out.println("Requests open: " + openCounter);
+ System.out.println("Requests closed: " + closedCounter);
+ System.out.println("Low Severity Requests (1-3): " + lowSeverityCount);
+ System.out.println("High Severity Requests (4-5): " + highSeverityCount);
+
+ if(highSeverityCount > 3)
+ {
+ System.out.println("OVERLOAD DETECTED!! MANY HIGH SEVERITY REQUESTS WERE FOUND TODAY!");
+ }
+ System.out.println("Most Common Issue: " + mostCommonIssue);
+ System.out.println();
+
+ System.out.println("Type anything to continue:");
+ InputHandler.handleStringInput();
+ }
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/menus/RequestMenu.java b/src/main/java/org/codedifferently/christopherbennett/menus/RequestMenu.java
new file mode 100644
index 0000000..794ae3e
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/menus/RequestMenu.java
@@ -0,0 +1,57 @@
+package org.codedifferently.christopherbennett.menus;
+
+import org.codedifferently.christopherbennett.data.MaintenanceRequest;
+import org.codedifferently.christopherbennett.enums.EIssueType;
+import org.codedifferently.christopherbennett.helpers.InputHandler;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RequestMenu {
+
+ public List promptRequestMenu() {
+
+ ArrayList requests = new ArrayList();
+
+ boolean inRequestMenu = true;
+ while(inRequestMenu) {
+ System.out.println("===== NEW REQUEST TRACKER =====\n");
+ System.out.println("Enter tenant name (or 'done' to stop):");
+ String inputStr = InputHandler.handleStringInput();
+
+ if(inputStr.equals("done"))
+ {
+ System.out.println("Exiting out of Request Tracker.");
+ inRequestMenu = false;
+ break;
+ }
+
+ System.out.println("Enter apartment number:");
+ String apartmentStr = InputHandler.handleStringInput();
+
+ System.out.println("Enter issue type: (Electrical/Plumbing/HVAC/Other)");
+
+ EIssueType[] issueOptions = {EIssueType.Electrical, EIssueType.HVAC, EIssueType.Plumbing, EIssueType.Other};
+ EIssueType issueStr = InputHandler.handleEnumInput(issueOptions);
+
+ System.out.println("Enter severity (1-5):");
+ int severityCode = InputHandler.handleIntegerInput();
+
+ System.out.println("✔ Request logged.");
+
+ if(severityCode >= 4 && issueStr == EIssueType.Electrical) {
+ System.out.println("⚠ WARNING: High-severity electrical issue. Safety risk — inspect immediately.");
+ }
+
+ if(severityCode >= 5) {
+ System.out.println("\uD83D\uDEA8 SEVERITY 5 DETECTED — Dispatching technician immediately!");
+ }
+
+ MaintenanceRequest request = new MaintenanceRequest(inputStr, apartmentStr, issueStr, severityCode);
+
+ requests.add(request);
+ }
+
+ return requests;
+ }
+}
diff --git a/src/main/java/org/codedifferently/christopherbennett/menus/TechMenu.java b/src/main/java/org/codedifferently/christopherbennett/menus/TechMenu.java
new file mode 100644
index 0000000..e0629a7
--- /dev/null
+++ b/src/main/java/org/codedifferently/christopherbennett/menus/TechMenu.java
@@ -0,0 +1,37 @@
+package org.codedifferently.christopherbennett.menus;
+
+import org.codedifferently.christopherbennett.data.MaintenanceRequest;
+import org.codedifferently.christopherbennett.data.Technician;
+import org.codedifferently.christopherbennett.helpers.InputHandler;
+
+import java.util.List;
+
+public class TechMenu {
+ public void promptTechMenu(List technicianList, List requests) {
+
+ System.out.println("====== PENDING REQUESTS ======");
+
+ for(int i = 0; i < requests.size(); i++) {
+ MaintenanceRequest request = requests.get(i);
+ System.out.print((i+1) + ". [" + request.getApartmentNumber());
+ System.out.print("] | Tenant: " + request.getTenantName() +
+ " | Severity: " + request.getSeverity() + " | Issue: ");
+ System.out.print(request.getIssueType() + " | Status: " + request.getStatus());
+ System.out.println();
+ }
+
+ System.out.println("===== TECHNICIAN WATCH =====\n");
+
+ for(int i = 0; i < technicianList.size(); i++) {
+ Technician tech = technicianList.get(i);
+ System.out.print((i+1) + ". " + tech.getName());
+ System.out.print(" | " + tech.getAge() + " | ");
+ System.out.print(tech.getProfessionLevel() + " | " + tech.getActivity());
+ System.out.println();
+ }
+
+ System.out.println();
+ System.out.println("Type anything to continue:");
+ InputHandler.handleStringInput();
+ }
+}