summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2025-10-09 21:03:25 -0400
committersowgro <tpoke.ferrari@gmail.com>2025-10-09 21:03:25 -0400
commit5f1ea0ee335a73edf53939b87218a34e93fe4de9 (patch)
tree077878354a1c17dca986a843d9ecfb9f8169e3b2 /src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
parent1eca2f8681752ad359e8372780cdf719e2b1747d (diff)
downloaddesignproject-design-6-5f1ea0ee335a73edf53939b87218a34e93fe4de9.tar.gz
designproject-design-6-5f1ea0ee335a73edf53939b87218a34e93fe4de9.tar.bz2
designproject-design-6-5f1ea0ee335a73edf53939b87218a34e93fe4de9.zip
Menu cleanup - pass 1
Diffstat (limited to '')
-rw-r--r--src/main/java/design/controller/userinput/menus/CourseSelectMenu.java96
1 files changed, 32 insertions, 64 deletions
diff --git a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
index af825e0..581b0b9 100644
--- a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
+++ b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
@@ -3,18 +3,19 @@ package design.controller.userinput.menus;
import design.controller.userinput.Menu;
import design.controller.userinput.MenuOption;
import design.model.Course;
+import design.model.Golfer;
import design.model.Hole;
import design.model.Round;
import java.time.LocalDateTime;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
-import design.persistence.MasterDatabase;
import design.runtime.Session;
public class CourseSelectMenu extends Menu {
+ Golfer golfer = Session.getCurrentGolfer();
@Override
public String getTitle() {
@@ -23,78 +24,45 @@ public class CourseSelectMenu extends Menu {
@Override
public List<MenuOption> getMenuOptions() {
- List<MenuOption> opts = new ArrayList<>();
-
- // 0) back
- opts.add(new MenuOption("back to main menu", () -> new MainMenu().present()));
-
- // 1) go to CourseSearchMenu to search for a course and add it profile
- opts.add(new MenuOption("Add Course to Profile", () -> new MainMenu().present()));
-
- // 2) pick course from MY PROFILE only
- opts.add(new MenuOption("pick course from my profile", () -> {
- var golfer = Session.getCurrentGolfer();
- Course[] mine = (golfer == null) ? new Course[0] : golfer.getCourses();
-
- // Checks user has courses of not informs them to add one to there profile
- if (mine == null || mine.length == 0) {
- System.out.println("You don't have any courses saved to your profile yet.");
- System.out.println("Use the 'Add Course to Profile' menu first.");
- this.present();
- return;
- }
- // Select a course
- Scanner sc = new Scanner(System.in);
+ return Arrays.stream(golfer.getCourses())
+ .map(i -> new MenuOption(i.toString(), () -> promptHole(i)))
+ .toList();
+ }
- // Prints all courses
- System.out.println("-- MY COURSES --");
- for (int i = 0; i < mine.length; i++) {
- Course c = mine[i];
- System.out.printf("%d: %s (%s) | Holes: %d | Total Par: %d | Difficulty: %.1f%n",
- i + 1, c.getName(), c.getLocation(), c.getHoleCount(), c.getTotalPar(),
- c.getDifficultyRating());
- }
- // Select course by number
- Course selected = null;
- while (selected == null) {
- System.out.print("Select course # (1.." + mine.length + "): ");
- String line = sc.nextLine().trim();
- int idx = Integer.parseInt(line);
- if (idx < 1 || idx > mine.length) {
- System.out.println("Out of range. Try again.");
- continue;
- }
- selected = mine[idx - 1];
- }
- // Gets starting hole on course
- int startHoleNum = readStartingHole(sc, selected.getHoleCount());
- // Starts round and sends user to HolePlayMenu
- startRound(selected, startHoleNum);
- }));
+ @Override
+ public void present() {
+ // Checks user has courses of not informs them to add one to there profile
+ if (golfer.getCourses().length == 0) {
+ System.out.println("You don't have any courses saved to your profile yet.");
+ System.out.println("Use the 'Add Course to Profile' menu first.");
+ new MainMenu().present();
+ return;
+ }
- return opts;
+ super.present();
}
- private int readStartingHole(Scanner sc, int holeCount) {
+ private void promptHole(Course selected) {
+ Scanner sc = new Scanner(System.in);
+ // Gets starting hole on course
+ int startHoleNum = 1;
+ int holeCount = selected.getHoleCount();
// Asks for a hole number until a valid number is selected
- while (true) {
- System.out.print("Starting hole (1.." + holeCount + ", blank=1): ");
- String s = sc.nextLine().trim();
- if (s.isEmpty())
- return 1;
+ System.out.print("Starting hole (1.." + holeCount + ", blank=1): ");
+ String s = sc.nextLine().trim();
+ if (!s.isEmpty()) {
int start = Integer.parseInt(s);
if (start < 1 || start > holeCount) {
System.out.println("Starting hole must be between 1 and " + holeCount + ".");
- continue;
+ return;
}
- return start;
+ startHoleNum = start;
}
- }
-
- private void startRound(Course c, int startHoleNum) {
- Hole startHole = c.getHoles().get(startHoleNum - 1);
- Round r = new Round(c, LocalDateTime.now(), startHole);
- Session.getCurrentGolfer().addRound(r);
+ // Starts round and sends user to HolePlayMenu
+ Hole startHole = selected.getHoles().get(startHoleNum - 1);
+ Round r = new Round(selected, LocalDateTime.now(), startHole);
+ golfer.addRound(r);
new HolePlayMenu(r).present();
}
+
}