diff --git a/.idea/misc.xml b/.idea/misc.xml
index fdc35ea..17e9c2e 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-
diff --git a/pom.xml b/pom.xml
index fad9976..a31152c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,4 +14,29 @@
UTF-8
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.10.2
+ test
+
+
+ org.testng
+ testng
+ RELEASE
+ compile
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.2.5
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/codedifferently/Main.java b/src/main/java/org/codedifferently/Main.java
index 435139b..351adbe 100644
--- a/src/main/java/org/codedifferently/Main.java
+++ b/src/main/java/org/codedifferently/Main.java
@@ -1,17 +1,79 @@
package org.codedifferently;
-//TIP To Run code, press or
-// click the icon in the gutter.
+import java.util.Scanner;
+
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);
+
+ Scanner scanner = new Scanner(System.in);
+ MaintenanceOffice office = new MaintenanceOffice();
+
+ // Level 1 — Pre-created requests
+ MaintenanceRequest r1 = new MaintenanceRequest("John Smith", 101, "Plumbing", 2);
+ MaintenanceRequest r2 = new MaintenanceRequest("Lisa Ray", 204, "Electrical", 5);
+ MaintenanceRequest r3 = new MaintenanceRequest("Mark Lee", 305, "Heating", 4);
+
+ System.out.println("---- INITIAL REQUESTS ----");
+
+ MaintenanceRequest[] initial = {r1, r2, r3};
+
+ for (MaintenanceRequest r : initial) {
+ System.out.println(r);
+
+ if (r.getSeverity() >= 4) {
+ System.out.println("HIGH PRIORITY");
+ }
+
+ office.addRequest(r);
+ }
+
+ // Level 2 — User Intake
+ while (true) {
+
+ System.out.println("\nEnter tenant name (or type 'done'):");
+ String name = scanner.nextLine();
+
+ if (name.equalsIgnoreCase("done")) {
+ break;
+ }
+
+ System.out.println("Apartment number:");
+ int apt = Integer.parseInt(scanner.nextLine());
+
+ System.out.println("Issue type:");
+ String issue = scanner.nextLine();
+
+ System.out.println("Severity (1-5):");
+ int severity = Integer.parseInt(scanner.nextLine());
+
+ MaintenanceRequest request = new MaintenanceRequest(name, apt, issue, severity);
+
+ office.addRequest(request);
+
+ System.out.println("Request logged successfully.");
+
+ if (issue.equalsIgnoreCase("Electrical") && severity >= 4) {
+ System.out.println("⚠ Electrical High Severity Warning!");
+ }
+
+ if (severity == 5) {
+ System.out.println("Dispatching technician immediately!");
+ office.assignTechnician(request);
+ }
+ }
+
+ // ===== Cancel Option =====
+ System.out.println("\nEnter tenant name to cancel (or press Enter to skip):");
+ String cancelName = scanner.nextLine();
+
+ if (!cancelName.isBlank()) {
+ office.cancelRequestByTenantName(cancelName);
}
+
+ // ===== Daily Report =====
+ office.generateDailyReport();
+
+ scanner.close();
}
}
\ No newline at end of file
diff --git a/src/main/java/org/codedifferently/MaintenanceOffice.java b/src/main/java/org/codedifferently/MaintenanceOffice.java
new file mode 100644
index 0000000..41521dd
--- /dev/null
+++ b/src/main/java/org/codedifferently/MaintenanceOffice.java
@@ -0,0 +1,138 @@
+package org.codedifferently;
+
+import java.util.ArrayList;
+
+public class MaintenanceOffice {
+
+ private ArrayList requests;
+
+ public MaintenanceOffice() {
+ requests = new ArrayList<>();
+ }
+
+ public void addRequest(MaintenanceRequest request) {
+ requests.add(request);
+ }
+
+ public void cancelRequest(MaintenanceRequest request) {
+
+ if (request.getStatus().equals("DONE")) {
+ System.out.println("Cannot cancel a completed request.");
+ return;
+ }
+
+ if (request.getStatus().equals("CANCELLED")) {
+ System.out.println("Request is already cancelled.");
+ return;
+ }
+
+ request.setStatus("CANCELLED");
+ request.setAssignedTech("None");
+ System.out.println("Request cancelled successfully.");
+ }
+
+ public void assignTechnician(MaintenanceRequest request) {
+
+ if (request.getSeverity() >= 4) {
+ request.setAssignedTech("Senior Tech Mike");
+ } else if (request.getSeverity() == 3) {
+ request.setAssignedTech("Tech Sarah");
+ } else {
+ request.setAssignedTech("Junior Tech Alex");
+ }
+
+ request.setStatus("IN_PROGRESS");
+ }
+
+ public void closeRequest(MaintenanceRequest request) {
+ if (request.getStatus().equals("DONE")) {
+ System.out.println("Request closed successfully.");
+ } else {
+ System.out.println("Cannot close request unless status is DONE.");
+ }
+ }
+
+ public void generateDailyReport() {
+
+ int total = requests.size();
+ int open = 0;
+ int closed = 0;
+ int low = 0;
+ int medium = 0;
+ int high = 0;
+ int cancelled = 0;
+
+ ArrayList issueTypes = new ArrayList<>();
+
+ for (MaintenanceRequest r : requests) {
+
+ // Status counts
+ if (r.getStatus().equals("DONE")) {
+ closed++;
+ } else if (r.getStatus().equals("CANCELLED")) {
+ cancelled++;
+ closed++;
+ } else {
+ open++;
+ }
+
+ // Severity counts
+ if (r.getSeverity() <= 2) {
+ low++;
+ } else if (r.getSeverity() == 3) {
+ medium++;
+ } else {
+ high++;
+ }
+
+ // Track issue types
+ issueTypes.add(r.getIssueType());
+ }
+
+ // Find most common issue type
+ String mostCommon = "";
+ int maxCount = 0;
+
+ for (String type : issueTypes) {
+ int count = 0;
+
+ for (String t : issueTypes) {
+ if (t.equalsIgnoreCase(type)) {
+ count++;
+ }
+ }
+
+ if (count > maxCount) {
+ maxCount = count;
+ mostCommon = type;
+ }
+ }
+
+ System.out.println("\n---- DAILY REPORT ----");
+ System.out.println("Total Requests: " + total);
+ System.out.println("Open: " + open);
+ System.out.println("Closed: " + closed);
+ System.out.println("Cancelled: " + cancelled);
+ System.out.println("Low Severity: " + low);
+ System.out.println("Medium Severity: " + medium);
+ System.out.println("High Severity: " + high);
+ System.out.println("Most Common Issue Type: " + mostCommon);
+
+ if (high > 3) {
+ System.out.println("⚠ OVERLOAD WARNING: Too many high priority requests!");
+ }
+ }
+
+ public void cancelRequestByTenantName(String name) {
+
+ for (MaintenanceRequest r : requests) {
+ if (r.getTenantName().equalsIgnoreCase(name)) {
+ cancelRequest(r);
+ return;
+ }
+ }
+
+ System.out.println("Request not found.");
+ }
+}
+
diff --git a/src/main/java/org/codedifferently/MaintenanceRequest.java b/src/main/java/org/codedifferently/MaintenanceRequest.java
new file mode 100644
index 0000000..478190a
--- /dev/null
+++ b/src/main/java/org/codedifferently/MaintenanceRequest.java
@@ -0,0 +1,83 @@
+package org.codedifferently;
+
+public class MaintenanceRequest {
+
+ private final String tenantName;
+ private final int apartmentNumber;
+ private final String issueType;
+ private final int severity; // 1–5
+ private String status; // NEW, IN_PROGRESS, DONE
+ private String assignedTech;
+
+ // Default Constructor
+ public MaintenanceRequest() {
+ this.tenantName = "";
+ this.apartmentNumber = 0;
+ this.issueType = "";
+ this.severity = 1;
+ this.status = "NEW";
+ this.assignedTech = "Unassigned";
+ }
+
+ // Parameterized Constructor
+ public MaintenanceRequest(String tenantName, int apartmentNumber, String issueType, int severity) {
+ this.tenantName = tenantName;
+ this.apartmentNumber = apartmentNumber;
+ this.issueType = issueType;
+ this.severity = severity;
+ this.status = "NEW";
+ this.assignedTech = "Unassigned";
+ }
+
+ // Getters
+ public String getTenantName() {
+ return tenantName;
+ }
+
+ public int getApartmentNumber() {
+ return apartmentNumber;
+ }
+
+ public String getIssueType() {
+ return issueType;
+ }
+
+ public int getSeverity() {
+ return severity;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public String getAssignedTech() {
+ return assignedTech;
+ }
+
+ // Setters
+ public void setStatus(String status) {
+ if (status.equals("NEW") ||
+ status.equals("IN_PROGRESS") ||
+ status.equals("DONE") ||
+ status.equals("CANCELLED")) {
+
+ this.status = status;
+ } else {
+ System.out.println("Invalid status update.");
+ }
+ }
+
+ public void setAssignedTech(String assignedTech) {
+ this.assignedTech = assignedTech;
+ }
+
+ @Override
+ public String toString() {
+ return "Tenant: " + tenantName +
+ " | Apt: " + apartmentNumber +
+ " | Issue: " + issueType +
+ " | Severity: " + severity +
+ " | Status: " + status +
+ " | Tech: " + assignedTech;
+ }
+}
\ No newline at end of file