package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; import design.model.Club; import design.model.Golfer; import design.persistence.PersonalDatabase; import design.runtime.Session; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class ManageClubs extends Menu { private final Golfer golfer = Session.getCurrentGolfer(); private final PersonalDatabase personalDB = PersonalDatabase.INSTANCE; @Override public String getTitle() { return "manage clubs"; } @Override public List getMenuOptions() { List opts = new java.util.ArrayList<>(); opts.add(new MenuOption("return to main menu", () -> new MainMenu().present())); opts.add(new MenuOption("list clubs", () -> { for (Club club : golfer.getClubs()) { System.out.printf("- %s\n", club); } this.present(); })); opts.add(new MenuOption("remove club...", () -> { var selector = new SelectClub(); selector.present(); golfer.removeClub(selector.getResult()); this.present(); })); opts.add(new MenuOption("add club...", () -> { Scanner sc = new Scanner(System.in); System.out.print("Manufacturer: "); String manufacture = sc.nextLine().trim(); System.out.print("Nickname: "); String nickname = sc.nextLine().trim(); var selector = new SelectClubType(); selector.present(); Club.ClubType type = selector.getResult(); golfer.addClub(manufacture, nickname, type); // Add club to JSON try { personalDB.updateGolfer(golfer); System.out.println("Club added and saved."); } catch (IOException e) { throw new RuntimeException("Failed to save club", e); } this.present(); })); return opts; } private static class SelectClubType extends Menu { private Club.ClubType result; @Override public String getTitle() { return "select club type"; } public Club.ClubType getResult() { return result; } @Override public List getMenuOptions() { return Arrays.stream(Club.ClubType.values()) .map(t -> new MenuOption(t.name(), () -> result = t)) .toList(); } } }