Bib1/fassade/Fassade.java

111 lines
4.1 KiB
Java

package fassade;
import backend.medium.Medien;
import backend.benutzer.*;
import fassade.Aausleihe;
import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;
import java.time.temporal.ChronoUnit;
public class Fassade {
private final Verwaltung verwaltung;
private LocalDate aktuellesDatum;
// Dummy Admin-Zugangsdaten
private static final String ADMIN_USERNAME = "admin";
private static final String ADMIN_PASSWORD = "admin123";
// Konstruktor
public Fassade(Verwaltung verwaltung) {
this.verwaltung = verwaltung;
this.aktuellesDatum = LocalDate.now(); // Initiales Datum ist das heutige Datum
}
// Benutzer registrieren
public void registriereBenutzer(Benutzer benutzer) {
verwaltung.addBenutzer(benutzer); // Benutzer zur fassade.Verwaltung hinzufügen
}
// Benutzer anmelden
public Benutzer anmeldenBenutzer(int kundennummer) {
return verwaltung.benutzerListe.stream()
.filter(b -> b.getKundennummer() == kundennummer)
.findFirst()
.orElse(null); // Gibt null zurück, wenn Benutzer nicht gefunden wurde
}
// backend.medium.Medien durchsuchen
public List<Medien> durchsuchenMedien(String suchbegriff) {
return verwaltung.durchsuchenMedien(verwaltung.mediensListe, suchbegriff);
}
// backend.medium.Medien ausleihen
public void ausleihen(int medienId, Benutzer benutzer, LocalDate ausleihDatum, LocalDate rueckgabeDatum) {
Medien medien = verwaltung.mediensListe.stream()
.filter(m -> m.getId() == medienId)
.findFirst()
.orElse(null);
if (medien != null) {
verwaltung.addAL(medien, benutzer, ausleihDatum, rueckgabeDatum); // Leihe das Medium aus
} else {
System.out.println("backend.medium.Medien nicht gefunden.");
}
}
// backend.medium.Medien zurückgeben
public void rueckgabe(int medienId, Benutzer benutzer, LocalDate rueckgabeDatum) {
verwaltung.rueckgabe(medienId, benutzer, rueckgabeDatum); // Rückgabe des Mediums
}
// backend.medium.Medien verlängern
public void verlaengern(int medienId, Benutzer benutzer) {
Medien medien = verwaltung.mediensListe.stream()
.filter(m -> m.getId() == medienId)
.findFirst()
.orElse(null);
if (medien != null) {
verwaltung.verlängern(medien, benutzer); // Verlängere die Leihfrist
} else {
System.out.println("backend.medium.Medien nicht gefunden.");
}
}
// Zeit verschieben
public void zeitVerschieben(LocalDate neuesDatum) {
this.aktuellesDatum = neuesDatum; // Aktuelles Datum auf das neue Datum setzen
}
// Aktuelles Datum abrufen
public LocalDate getAktuellesDatum() {
return aktuellesDatum; // Gibt das aktuelle Datum zurück
}
// Admin-Login-Methode
public boolean adminLogin(String benutzername, String passwort) {
return ADMIN_USERNAME.equals(benutzername) && ADMIN_PASSWORD.equals(passwort);
}
// Methode zum Verbuchen überfälliger Gebühren
public void verbucheUeberfaelligeGebuehren() {
// Hole alle überfälligen Ausleihen
List<Aausleihe> ueberfaelligAusleihen = verwaltung.getAlleAusleihen().stream()
.filter(ausleihe -> LocalDate.now().isAfter(ausleihe.getRueckgabeDatum()) && !ausleihe.getMedien().istAusgeliehen())
.collect(Collectors.toList());
// Gebühr für jede überfällige Ausleihe berechnen und dem Benutzer hinzufügen
for (Aausleihe ausleihe : ueberfaelligAusleihen) {
Benutzer benutzer = ausleihe.getBenutzer();
long ueberfaelligeTage = ChronoUnit.DAYS.between(ausleihe.getRueckgabeDatum(), LocalDate.now());
double gebuehr = ueberfaelligeTage * 2.0; // Beispiel: 2 EUR pro überfälligem Tag
benutzer.addGebuehr(gebuehr); // Gebühr dem Benutzer hinzufügen
System.out.println("Gebühr für " + benutzer.getName() + ": " + gebuehr + " EUR");
}
}
}