package OnlineShop.domain;

import java.io.File;
import java.io.FileNotFoundException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import OnlineShop.domain.ExceptionsKlassen.*;

public class Kaufhalle {
	private ArrayList<Produkt> produkte;
	private ArrayList<Bestellung> Bestellungen;
	private Kunde kunde;
	private Bestellung aktuellBestelung;

	public Kaufhalle() throws FileNotFoundException {
		this.produkte = new ArrayList<>();
		this.kunde = new Kunde();
		this.Bestellungen = new ArrayList<>();
	}

	public boolean produkteLaden() throws FileNotFoundException {
		Scanner sc = new Scanner(new File("C:\\Users\\obaya\\git\\Programmierung2\\Programmierung2\\src\\OnlineShop\\domain\\produkte.csv"));

		int cnt = 0;
		while (sc.hasNextLine()) {
			String produkt = sc.nextLine();

			if (produkt.startsWith("Name"))
				continue;

			String[] spalten = produkt.split(";");
			spalten[2] = spalten[2].replaceAll(",", ".");
			spalten[3] = spalten[3].substring(0, spalten[3].indexOf(","));
			spalten[4] = spalten[4].substring(0, spalten[4].indexOf(","));

			produkte.add(new Produkt(spalten[0], spalten[1], Float.parseFloat(spalten[2]), Integer.parseInt(spalten[3]),
					Integer.parseInt(spalten[4])));
			cnt++;
		}

		sc.close();
		return true;
	}

	public boolean addProduktZuWarenkorb(String Produktname, int menge) throws ProduktNichtGefundenException {
		Produkt neueProdukt = findeProduktImKaufhalle(Produktname);
		if (neueProdukt == null)
			throw new ProduktNichtGefundenException("Produkt ist nicht Verfügbar!");
		
		double betrag = 0.0;
		
		if (menge <= neueProdukt.getBestand())
			betrag = neueProdukt.getPreis() * menge;

		kunde.getWarenKorb().addProdukt(neueProdukt);
		return true;
	}

	public boolean loescheProduktausWarenkorb(String Produktname) {
		return kunde.getWarenKorb().loescheprodukt(Produktname);
	}

	public ArrayList<String> zeigeProdukte() {
		ArrayList<String> allProdukte = new ArrayList<>();
		int index = 1;
		for (Produkt p : produkte)
			allProdukte.add(index++ + ".Produkt: " + p.print());

		return allProdukte;
	}

	private Produkt findeProduktImKaufhalle(String name) {

		for (Produkt p : produkte)
			if (p.getName().equalsIgnoreCase(name))
				return p;

		return null;
	}

	public int getAnzahlDerAusgewählteProdukte() {
		return kunde.getWarenKorb().getAnzahlProdkute();
	}

	public ArrayList<String> zeigeAlleProdukteImWarenkorb() throws KeineProdukteImWarenkorb {
		return kunde.getWarenKorb().zeigeProdukteImWarenKorb();
	}

	public String sendBestellung() {
		aktuellBestelung = new Bestellung();
		aktuellBestelung.gesamtKosten(kunde.getWarenKorb().getProdukte());

		return "Produkts Kosten = " + aktuellBestelung.getKosten() + "\n" + "Versand Kosten = " + aktuellBestelung.getVersandKosten()
				+ "\n" + "GesamtKosten(Produkts Ksoten  + Versand Kosten) = " + aktuellBestelung.getGesamtKosten();

	}

	public void getKundenDaten(String name, String anschrift) throws LeereEingabeException {
		if (!name.isEmpty() && !name.isEmpty()) {
			kunde.setName(name);
			kunde.setAnschrift(anschrift);
			return;
		} else
			throw new LeereEingabeException("Sie müssen Ihren Name sowie Ihren Anschrift eingeben");
	}

	public boolean getBetrag(double betrag) {
		return betrag == aktuellBestelung.getGesamtKosten();
	}
	
	public void speichereBestellung() {
		aktuellBestelung.setDate(LocalDate.now());
		Bestellungen.add(aktuellBestelung);
	}
}
