package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; import design.persistence.JSONPersonalDatabase; import design.persistence.XMLParser; import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Scanner; public class ImportExportMenu extends Menu { XMLParser xmlParser = new XMLParser(); private static final Map> handlers = Map.of( "json", Map.of( true, new PersonalJsonHandler(), false, new LeagueJsonHandler() ), "csv", Map.of( true, new PersonalCsvHandler(), false, new LeagueCsvHandler() )); @Override public String getTitle() { return "import export menu"; } @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("import league...", () -> promptForPath(true, false))); opts.add(new MenuOption("export league...", () -> promptForPath(false, false))); opts.add(new MenuOption("import personal profile...", () -> promptForPath(true, true))); opts.add(new MenuOption("export personal profile...", () -> promptForPath(false, true))); return opts; } private void promptForPath(boolean isImporting, boolean isPersonalProfile) { System.out.println("Enter file path: "); Scanner sc = new Scanner(System.in); String path = sc.nextLine(); File file = new File(path); String ext = getExtension(path); Map map = handlers.get(ext); if (map == null) { System.out.println("Unsupported file type: " + ext); return; } DataHandler handler = map.get(isPersonalProfile); if (handler == null) { System.out.println("No handler for this profile type."); return; } try { if (isImporting) handler.importData(file); else handler.exportData(file); } catch (IOException e) { System.err.println("I/O error: " + e.getMessage()); } } private static String getExtension(String fileName) { int i = fileName.lastIndexOf('.'); return (i >= 0) ? fileName.substring(i + 1).toLowerCase() : ""; } }