package design.controller.userinput.menus; import design.controller.userinput.Action; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; import design.model.Golfer; import design.runtime.Session; import design.persistence.PersonalDatabase; import design.model.undo.UndoManager; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class SelectUser extends Menu { private final PersonalDatabase personalDB = PersonalDatabase.instance(); private final Action doAfter; private final Scanner scanner = new Scanner(System.in); public SelectUser(Action doAfter) { this.doAfter = doAfter; } @Override public String getTitle() { return "select user"; } @Override public List getMenuOptions() { var opts = new ArrayList(); for (Golfer i : personalDB.getGolfers()) { opts.add(new MenuOption(i.toString(), () -> login(i))); } opts.add(new MenuOption("", () -> { System.out.print("Enter username: "); var username = scanner.nextLine(); System.out.print("Enter full name: "); var fullName = scanner.nextLine(); System.out.print("Enter password: "); var password = scanner.nextLine(); try { personalDB.addGolfer(new Golfer(fullName, username, password)); } catch (IOException ex) { throw new RuntimeException(ex); } this.present(); })); return opts; } private void login(Golfer g) { System.out.print("Enter password: "); var password = scanner.nextLine(); if (g.checkPassword(password)) { // Sets user in Session too Session.setCurrentGolfer(g); UndoManager.instance().purge(); System.out.printf("Loaded user: %s%n", g); doAfter.onAction(); } else { System.out.println("Incorrect password. "); this.present(); } } }