package UI; import backend.benutzer.*; import fassade.*; import backend.creator.Creator; import java.time.LocalDate; import java.util.Scanner; public class Ui { private final Fassade fassade; private final Scanner scanner; public Ui(Fassade fassade) { this.fassade = fassade; this.scanner = new Scanner(System.in); } public void starten() { boolean weiter = true; while (weiter) { System.out.println("Bitte wählen Sie eine Option:"); System.out.println("1. Medien durchsuchen"); System.out.println("2. Benutzer registrieren"); System.out.println("3. Benutzer anmelden"); System.out.println("4. Medien ausleihen"); System.out.println("5. Medien zurückgeben"); System.out.println("6. Medien verlängern"); System.out.println("7. Gebühren einsehen"); System.out.println("8. Zeit verschieben"); System.out.println("9. Admin-Login zur Gebührenverwaltung"); System.out.println("10. Beenden"); int auswahl = scanner.nextInt(); scanner.nextLine(); // Puffer leeren switch (auswahl) { case 1: durchsuchenMedien(); break; case 2: registrierenBenutzer(); break; case 3: anmeldenBenutzer(); break; case 4: ausleihen(); break; case 5: rueckgabe(); break; case 6: verlaengern(); break; case 7: gebuehrenEinsehen(); break; case 8: zeitVerschieben(); break; case 9: adminLogin(); break; case 10: weiter = false; break; default: System.out.println("Ungültige Auswahl."); break; } } } // Medien durchsuchen private void durchsuchenMedien() { System.out.print("Suchbegriff (oder 'all' für alle Medien): "); String suchbegriff = scanner.nextLine(); var ergebnisse = fassade.durchsuchenMedien(suchbegriff); if (ergebnisse.isEmpty()) { System.out.println("Keine Medien gefunden."); } else { ergebnisse.forEach(m -> System.out.println(m)); } } // Benutzer registrieren private void registrierenBenutzer() { System.out.print("Vorname: "); String vorname = scanner.nextLine(); System.out.print("Nachname: "); String nachname = scanner.nextLine(); System.out.print("Benutzertyp (e für Erwachsener, s für Schüler/Student): "); String art = scanner.nextLine(); // Benutzer über die Fassade registrieren Benutzer benutzer = Creator.factoryBenutzer(vorname, nachname, 0, art); // Kundennummer könnte hier 0 sein, wenn sie noch nicht vergeben wurde. if (benutzer != null) { fassade.registriereBenutzer(benutzer); System.out.println("Benutzer erfolgreich registriert."); } else { System.out.println("Fehler: Ungültiger Benutzertyp."); } } // Benutzer anmelden private void anmeldenBenutzer() { System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); scanner.nextLine(); // Puffer leeren Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer); if (benutzer != null) { System.out.println("Benutzer angemeldet: " + benutzer.getName() + " " + benutzer.getNachname()); } else { System.out.println("Benutzer nicht gefunden."); } } // Medien ausleihen private void ausleihen() { System.out.print("Medien ID: "); int medienId = scanner.nextInt(); System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); scanner.nextLine(); // Puffer leeren Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer); if (benutzer != null) { System.out.print("Rückgabedatum (yyyy-MM-dd): "); LocalDate rueckgabeDatum = LocalDate.parse(scanner.nextLine()); fassade.ausleihen(medienId, benutzer, LocalDate.now(), rueckgabeDatum); System.out.println("Ausleihe erfolgreich."); } else { System.out.println("Benutzer nicht gefunden."); } } // Medien zurückgeben private void rueckgabe() { System.out.print("Medien ID: "); int medienId = scanner.nextInt(); System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); scanner.nextLine(); // Puffer leeren Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer); if (benutzer != null) { System.out.print("Rückgabedatum (yyyy-MM-dd): "); LocalDate rueckgabeDatum = LocalDate.parse(scanner.nextLine()); fassade.rueckgabe(medienId, benutzer, rueckgabeDatum); System.out.println("Rückgabe erfolgreich."); } else { System.out.println("Benutzer nicht gefunden."); } } // Medien verlängern private void verlaengern() { System.out.print("Medien ID: "); int medienId = scanner.nextInt(); System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); scanner.nextLine(); // Puffer leeren Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer); if (benutzer != null) { fassade.verlaengern(medienId, benutzer); } else { System.out.println("Benutzer nicht gefunden."); } } // Gebühren einsehen private void gebuehrenEinsehen() { System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); scanner.nextLine(); // Puffer leeren Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer); if (benutzer != null) { System.out.println("Ausstehende Gebühren: " + benutzer.getGebuehren() + "€"); } else { System.out.println("Benutzer nicht gefunden."); } } // Zeit verschieben private void zeitVerschieben() { System.out.print("Neue Zeit (yyyy-MM-dd): "); String datum = scanner.nextLine(); fassade.zeitVerschieben(LocalDate.parse(datum)); System.out.println("Aktuelles Datum wurde auf " + datum + " geändert."); } // Admin-Login zur Gebührenverwaltung private void adminLogin() { System.out.print("Admin-Benutzername: "); String benutzername = scanner.nextLine(); System.out.print("Admin-Passwort: "); String passwort = scanner.nextLine(); if (fassade.adminLogin(benutzername, passwort)) { System.out.println("Admin-Login erfolgreich."); fassade.verbucheUeberfaelligeGebuehren(); // Verbucht überfällige Gebühren } else { System.out.println("Falsche Admin-Zugangsdaten."); } } }