package autovermietung;

import autovermietung.helper.Shop;
import autovermietung.models.Kunde;
import autovermietung.models.Modell;
import autovermietung.models.Pkw;
import autovermietung.helper.Database;
import autovermietung.helper.Tastatur;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // Auslesen der momentanen Datenbank Daten
        ArrayList<Kunde> kunden;
        ArrayList<Modell> modelle;
        ArrayList<Pkw> pkws;
        int auswahl = 99;
        int toDelete = 999;

        do {
            kunden = Database.liesKunden();
            modelle = Database.liesModell();
            pkws = Database.liesPkw();

            Shop.hauptMenu();
            auswahl = Tastatur.liesInt();
            switch (auswahl) {
                // Auto Menü wird angezeigt
                case 1:
                    Shop.autoMenu();
                    auswahl = Tastatur.liesInt();
                    switch (auswahl) {
                        // Auto erstellen Menü wird ausgeführt
                        case 1:
                            pkws.add(Shop.autoVermieten(modelle, kunden));
                            break;
                        // Autos anzeigen in der Datenbank
                        case 2:
                            Shop.autoAnzeigen(pkws, modelle, kunden);
                            Tastatur.liesString();
                            break;
                        // Auto miete beenden und Preis ausrechnen
                        case 3:
                            toDelete = Shop.mieteBeenden(pkws, modelle, kunden);
                            Database.deletePkw(pkws.get(toDelete));
                            pkws.remove(toDelete);
                            break;
                        // Auto löschen aus der Datenbank
                        case 9:
                            toDelete = Shop.autoEntfernen(pkws, modelle, kunden);
                            Database.deletePkw(pkws.get(toDelete));
                            pkws.remove(toDelete);
                            break;
                    }

                    // Updaten aller Autos in der PKW Liste.
                    for(Pkw pkw : pkws) {
                        Database.updatePkw(pkw);
                    }
                    break;
                // Modell Menü wird angezeigt
                case 2:
                    Shop.modellMenu();
                    auswahl = Tastatur.liesInt();
                    switch (auswahl) {
                        // Erstellen eines Auto Modells
                        case 1:
                            modelle.add(Shop.modellErstellen(modelle));
                            break;
                        // Anzeigen aller Auto Modelle
                        case 2:
                            Shop.modellAnzeigen(modelle);
                            Tastatur.liesString();
                            break;
                        // Löschen eines Auto Modells
                        case 9:
                            toDelete = Shop.modellEntfernen(modelle);
                            Database.deleteModell(modelle.get(toDelete));
                            modelle.remove(toDelete);
                            break;
                    }

                    // Updaten aller Modelle in der Modell Liste.
                    for(Modell modell : modelle) {
                        Database.updateModell(modell);
                    }
                    break;
                // Kunden Menü wird angezeigt
                case 3:
                    Shop.kundenMenu();
                    auswahl = Tastatur.liesInt();
                    switch (auswahl) {
                        // Erstellen eines neues Kunden
                        case 1:
                            kunden.add(Shop.kundeErstellen(kunden));
                            break;
                        // Anzeigen aller eingetragenen Kunden
                        case 2:
                            Shop.kundeAnzeigen(kunden);
                            Tastatur.liesString();
                            break;
                        // Löschen eines Kunden in der Datenbank
                        case 9:
                            toDelete = Shop.kundenEntfernen(kunden);
                            Database.deleteKunde(kunden.get(toDelete));
                            kunden.remove(toDelete);
                    }

                    // Updaten aller Kunden in der Kunden Liste.
                    for(Kunde kunde : kunden) {
                        Database.updateKunde(kunde);
                    }
                    break;
                // Programm wird beendet
                case 0:
                    Shop.programmBeendet();
                    break;
                // Hauptmenü wird angezeigt da falsche Eingabe
                default:
                    Shop.falscheEingabe();
                    Shop.hauptMenu();
                    auswahl = Tastatur.liesInt();
            }

        } while(auswahl != 0);
    }
}
