package Parkhaus;

import java.text.ParseException;
import java.util.Scanner;

public class TextUI {
	private Parkhaus system;

	TextUI() throws ParseException, AutoNichtGefundenException, Exception {
		system = new Parkhaus();
		startprogramm();
	}

	private void startprogramm() throws Exception {
		Scanner eingabe = new Scanner(System.in);
		boolean aktiv = true;

		System.out.println("<<Willkommen im parkhaus 'kiss and ride'>> ");
		while (aktiv) {
			System.out.println();
			System.out.println("Bitte Wählen Sie ein Option ein: ");
			System.out.println("1.Einfahren");
			System.out.println("2.Parkgebühren berechnen lassen");
			System.out.println("3.Ausfahren");
			System.out.println("4.Beenden");

			System.out.print("> ");
			String auswhal = eingabe.nextLine();
			String kennzeichen;
			String einfahrtzeit;
			String ausfahrtzeit;
			double betrag;
			String visaKarteNummer;

			switch (auswhal) {
			case "1": // Einfahren
				if (!system.checkParkplatze())
					System.out.println("Es gibt im Parkhaus keine Parkplätze");
				else {
					System.out.println("geben Sie bitte das Kennzeichen Ihres Autos ein (optional): ");
					System.out.print("> ");
					kennzeichen = eingabe.nextLine();
					if (system.checkSchulden(kennzeichen))
						System.err.println("Das Auto mit dem Kennzeichen: " + system.getkennzeichenAktuellesAuto() + " ist im Parkhaus mit Schulden eingefahren!");
					System.out.println("geben Sie nun bitte die Einfahrtszeit ein (oder lassen Sie das für das System):");
					System.out.print("> ");
					einfahrtzeit = eingabe.nextLine();
					System.out.println(system.einfahren(kennzeichen, einfahrtzeit));
				}
				break;

			case "2": // Parkgebühren berechnen lassen
				System.out.println("Geben Sie erneut das Kennzeichnes Ihres Autos an");
				System.out.print("> ");
				kennzeichen = eingabe.nextLine();
				System.out.println("Geben Sie bitte die Ausfahrtzeit ein (oder lassen Sie das für das System)");
				System.out.print("> ");
				ausfahrtzeit = eingabe.nextLine();
				betrag = system.berechneParkgebuehren(kennzeichen, ausfahrtzeit);
				System.out.println("Ihr Betrag ist: " + betrag + "€");
				if (betrag > 0.0) {
					String zahlungsOptions;
					System.out.println("Bitte wählen Sie ein Option aus, was Sie mit dem Ihrem Betrag machen möchten: ");
					System.out.println("1.Sofort bezahlen");
					System.out.println("2.Betrag als Schulden hinterlassen");
					System.out.print(">");
					zahlungsOptions = eingabe.nextLine();
					switch (zahlungsOptions) {
					case "1":
						System.out.println("Geben Sie bitte Ihre 16-stellige Visa-karte Nummer ein: ");
						System.out.print(">");
						visaKarteNummer = eingabe.nextLine().trim();
						// Also wenn die Visakarte korrekt ist, markiert das System das Auto mit dem
						// Kennzeichen als Bezahlt
						if (system.checkVisakarteNummer(visaKarteNummer))
							if (system.gebuerenNehmen(betrag)) {
								system.setBezahlt(kennzeichen);
								System.out.println("Ihre Auszahlung war erfolgreich");
							} else
								System.out.println("Die eingegebene Visa-Kartennummer ist ungültig.");

						break;

					case "2":
						// System markiert das Auto als verschuldet und speichert es dann im System
						system.setVerschuldet(kennzeichen);
						System.out.println("Der Betrag wurde als Schulden gespeichert");
						break;
					default:
						System.out.println("Das war leider keine gültige Eingabe");
					}

				}
				break;
			case "3": // Ausfahren
				System.out.println("Um ausfahren zu können, sollen Sie das Kennzeichen Ihres Auto sowie die Ausfahrtzeit eingeben");
				System.out.print(">");
				kennzeichen = eingabe.nextLine();
				System.out.println("Geben Sie nun die Ausfahrtzeit an: ");
				System.out.print(">");
				ausfahrtzeit = eingabe.nextLine();
				if (!system.ausfahren(kennzeichen, ausfahrtzeit))
					System.err.println("Das Auto mit dem Kennzeichen: " + system.getkennzeichenAktuellesAuto()  +  " fährt ohne Zahlung aus");
				break;
			case "4":
				 System.out.println("Das Programm wird beendet.");
				aktiv = false;
				eingabe.close();
				break;
			default:
				System.out.println("Das war leider keine gültige Eingabe");

			}
		}
	}
}
