package autovermietung.helper;

import autovermietung.models.Kunde;
import autovermietung.models.Modell;
import autovermietung.models.Pkw;

import java.sql.Date;
import java.time.LocalDate;
import java.util.ArrayList;

public class Shop {
    private static void clearScreen() {
        try
        {
            final String os = System.getProperty("os.name");

            if (os.contains("Windows"))
            {
                new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
            }
            else
            {
                Runtime.getRuntime().exec("clear");
            }
        }
        catch (final Exception e)
        {
            System.out.println(e);
        }
    }

    private static void menuText() {
        clearScreen();
        System.out.println("================================================");
        System.out.println("Bitte aus den folgenen Menüpunkten wählen:");
        System.out.println("================================================");
    }

    private static void menuEnde() {
        System.out.println();
        System.out.println("0.\tProgramm beenden");
        System.out.println("================================================");
        System.out.print("Ihre Auswahl: ");
    }

    public static void hauptMenu() {
        menuText();
        System.out.println("1.\tAuto Verwaltung");
        System.out.println("2.\tModell Verwaltung");
        System.out.println("3.\tKunden Verwaltung");
        menuEnde();
    }

    public static void falscheEingabe() {
        System.out.println("Es wurde kein Menüpunkt ausgewählt!");
        System.out.println();
    }

    public static void autoMenu() {
        menuText();
        System.out.println("1.\tAutos vermieten");
        System.out.println("2.\tAutos anzeigen");
        System.out.println("3.\tMiete eines Autos beenden");
        System.out.println("9.\tAuto entfernen");
        menuEnde();
    }

    public static void modellMenu() {
        menuText();
        System.out.println("1.\tModell erstellen");
        System.out.println("2.\tModell anzeigen");
        System.out.println("9.\tModell entfernen");
        menuEnde();
    }

    public static void kundenMenu() {
        menuText();
        System.out.println("1.\tKunde erstellen");
        System.out.println("2.\tKunde anzeigen");
        System.out.println("9.\tKunde entfernen");
        menuEnde();
    }

    public static void autoAnzeigen(ArrayList<Pkw> autos, ArrayList<Modell> modelle, ArrayList<Kunde> kunden) {
        clearScreen();
        for(Pkw auto : autos) {
            auto.getInformation();
            System.out.print("\t" + modelle.get(auto.getMnr() - 1).getModellname());
            System.out.println("\t" + kunden.get(auto.getKnr() - 1).getNachname());
        }
        System.out.println("Beliebige Taste drücken, um fortzufahren.");
    }

    public static Pkw autoVermieten(ArrayList<Modell> modelle, ArrayList<Kunde> kunden) {
        clearScreen();
        System.out.print("Bitte das Kennzeichen angeben: ");
        String k = Tastatur.liesString();
        System.out.print("Erstzulassung Datum angeben (YYYY-MM-DD): ");
        Date e = Tastatur.liesDate();
        System.out.print("Bitte momentanen Tachostand angeben: ");
        int t = Tastatur.liesInt();
        System.out.print("Bitte die Farbe des Fahrzeugs angeben: ");
        String f = Tastatur.liesString();

        System.out.print("Bitte das Ausleihdatum angeben(YYYY-MM-DD oder heute): ");
        String aTemp = Tastatur.liesString();
        Date a;
        if(aTemp.equals("heute")) {
            a = Date.valueOf(LocalDate.now());
        } else {
            a = Date.valueOf(aTemp);
        }

        System.out.println("Liste der Modelle: ");
        for(Modell modell : modelle) {
            modell.getInformation();
        }
        System.out.print("Bitte die Modell-Nr angeben:");
        int mnr = Tastatur.liesInt();

        System.out.println("Liste der Kunden: ");
        for(Kunde kunde : kunden) {
            kunde.getInformation();
        }
        System.out.print("Bitte die Kundennummer angeben: ");
        int knr = Tastatur.liesInt();

        System.out.println("Das Auto wurde vermietet.");
        return new Pkw(k, e, t, f, a, mnr, knr);
    }

    public static Modell modellErstellen(ArrayList<Modell> modelle) {
        clearScreen();
        System.out.print("Bitte den Modellnamen angeben: ");
        String mn = Tastatur.liesString();
        System.out.print("Bitte den Hubraum angeben: ");
        int h = Tastatur.liesInt();
        System.out.print("Bitte die Leistung angeben: ");
        int l = Tastatur.liesInt();
        System.out.print("Bitte den KM Preis angeben: ");
        float kmp = Tastatur.liesFloat();
        System.out.print("Bitte den Pauschalpreis angeben: ");
        float p = Tastatur.liesFloat();

        return new Modell(modelle.size() + 1, mn, h, l, kmp, p);
    }

    public static Kunde kundeErstellen(ArrayList<Kunde> kunden) {
        clearScreen();
        System.out.print("Bitte Vorname des Kunden angeben: ");
        String v = Tastatur.liesString();
        System.out.print("Bitte Nachnamen des Kunden angeben: ");
        String n = Tastatur.liesString();
        System.out.print("Bitte Anschrift des Kunden angeben: ");
        String a = Tastatur.liesString();
        System.out.print("Bitte die Telefonnummer des Kunden angeben: ");
        String t = Tastatur.liesString();
        System.out.print("Bitte die Personalausweisnummer angeben: ");
        int p = Tastatur.liesInt();

        return new Kunde(kunden.size() + 1, v, n, a, t, p);
    }

    public static int autoEntfernen(ArrayList<Pkw> autos, ArrayList<Modell> modelle, ArrayList<Kunde> kunden) {
        clearScreen();
        System.out.println("Liste der Autos:");
        for (int i = 0; i < autos.size(); i++) {
            System.out.print(i + 1 + ": ");
            autos.get(i).getInformation();
            System.out.print("\t" + modelle.get(autos.get(i).getMnr() - 1).getModellname());
            System.out.println("\t" + kunden.get(autos.get(i).getKnr() - 1).getNachname());
        }
        System.out.print("Bitte die Nummer des zu entfernenen Auto abgeben: ");
        return Tastatur.liesInt() - 1;
    }

    public static void modellAnzeigen(ArrayList<Modell> modelle) {
        clearScreen();
        for(Modell modell : modelle) {
            modell.getInformation();
        }
        System.out.println("Beliebige Taste drücken, um fortzufahren.");
    }

    public static int modellEntfernen(ArrayList<Modell> modell) {
        clearScreen();
        System.out.println("Liste der Autos:");
        for (int i = 0; i < modell.size(); i++) {
            System.out.print(i + 1 + ": ");
            modell.get(i).getInformation();
        }
        System.out.print("Bitte die Nummer des zu entfernenen Modell abgeben: ");
        return Tastatur.liesInt() - 1;
    }

    public static void kundeAnzeigen(ArrayList<Kunde> kunden) {
        clearScreen();
        for(Kunde kunde : kunden) {
            kunde.getInformation();
        }
        System.out.println("Beliebige Taste drücken, um fortzufahren.");
    }

    public static int kundenEntfernen(ArrayList<Kunde> kunden) {
        clearScreen();
        System.out.println("Liste der Autos:");
        for (int i = 0; i < kunden.size(); i++) {
            System.out.print(i + 1 + ": ");
            kunden.get(i).getInformation();
        }
        System.out.print("Bitte die Nummer des zu entfernenen Kunden abgeben: ");
        return Tastatur.liesInt() - 1;
    }

    public static int mieteBeenden(ArrayList<Pkw> autos, ArrayList<Modell> modelle, ArrayList<Kunde> kunden) {
        clearScreen();
        int autoNr;
        int neuerTacho;
        float kostenoP;
        float kosten;
        System.out.println("Liste der Autos:");
        for (int i = 0; i < autos.size(); i++) {
            System.out.print(i + 1 + ": ");
            autos.get(i).getInformation();
            System.out.print("\t" + modelle.get(autos.get(i).getMnr() - 1).getModellname());
            System.out.println("\t" + kunden.get(autos.get(i).getKnr() - 1).getNachname());
        }
        System.out.print("Bitte die Nummer des Autos abgeben: ");
        autoNr = Tastatur.liesInt() - 1;

        System.out.print("Bitte den momentanen Tachostand angeben: ");
        neuerTacho = Tastatur.liesInt();

        kostenoP = (neuerTacho - autos.get(autoNr).getTachostand()) * modelle.get(autos.get(autoNr).getMnr() - 1).getKmpreis();
        kosten = kostenoP + modelle.get(autos.get(autoNr).getMnr() - 1).getPauschale();
        System.out.println("Der Preis beträgt: " + kosten);

        return autoNr;
    }

    public static void programmBeendet() {
        clearScreen();
        System.out.println("Das Programm wurde durch den User beendet!");
    }
}
