package pkgIntelligenz;

import pkgGUI.*;
import pkgSpieluniversum.*;

public class Spielsteuerung {
	private Welt welt;

	public Spielsteuerung(Welt welt) {
		this.welt = welt;
		this.heldInNeuenRaumBewegen(welt.getRaumListe().get(0));
		this.userAktionAbfragen();
	}

	public void userAktionAbfragen() {
		String eingabe = InOut
				.stringEingeben(Textbaustein.USER_AKTION_ABFRAGEN);
		this.aktionAusfuehren(eingabe);

	}

	public void aktionAusfuehren(String usereingabe) {
		Raum aktuellerRaum = this.welt.getHeld().getAktuellerRaum();
		Held held = this.welt.getHeld();
		Parser parser = new Parser(usereingabe);
		if (parser.getAnzahlWoerter() == 1) { // Eingabe besteht aus einem Wort
			switch (parser.getWort1()) {
			case "w":

				if (aktuellerRaum.getN() != null) {

					if (aktuellerRaum.getName().equals("Secret")) {

						for (Item itemsImInventar : held.getItemListe()) {

							if (!itemsImInventar.getBezeichnung().equals("Schluessel-Secret")) {

								InOut.textAusgeben("Dir fehlt der Schlüssel");

							} else {
									
								this.heldInNeuenRaumBewegen(aktuellerRaum.getN());
							}

						}

					} else {
						this.heldInNeuenRaumBewegen(aktuellerRaum.getN());
					}

				} else {
					InOut.textAusgeben(Textbaustein.RICHTUNG_NICHT_MOEGLICH);
				}
				break;
			case "s":

				if (aktuellerRaum.getS() != null) {
					this.heldInNeuenRaumBewegen(aktuellerRaum.getS());
				} else {
					InOut.textAusgeben(Textbaustein.RICHTUNG_NICHT_MOEGLICH);
				}
				break;

			case "d":

				if (aktuellerRaum.getO() != null) {

					if (aktuellerRaum.getName().equals("Eingang")) {

						for (Item itemsImInventar : held.getItemListe()) {

							if (!itemsImInventar.getBezeichnung().equals("Schluessel-Eingangstor")) {

								InOut.textAusgeben("Dir fehlt der schlüssel");

							} else {
									
								this.heldInNeuenRaumBewegen(aktuellerRaum.getO());
							}

						}

					} else {
						this.heldInNeuenRaumBewegen(aktuellerRaum.getO());
					}

					if (aktuellerRaum.getName().equals("Vor dem Tor zur nächsten Ebene")) {

						for (Item itemsImInventar : held.getItemListe()) {

							if (!itemsImInventar.getBezeichnung().equals("Schluessel-Fragment")) {

								InOut.textAusgeben("Dir fehlt der schlüssel");

							} else {
									
								this.heldInNeuenRaumBewegen(aktuellerRaum.getO());
							}

						}

					} else {
						this.heldInNeuenRaumBewegen(aktuellerRaum.getO());
					}
					
					
				} else {
					InOut.textAusgeben(Textbaustein.RICHTUNG_NICHT_MOEGLICH);
				}
				break;

			case "a":
				if (aktuellerRaum.getW() != null) {
					this.heldInNeuenRaumBewegen(aktuellerRaum.getW());
				} else {
					InOut.textAusgeben(Textbaustein.RICHTUNG_NICHT_MOEGLICH);
				}
				break;
			case "h":
				InOut.textAusgeben(Textbaustein.HILFETEXT);
				break;
			case "i":
				if (this.welt.getHeld().getItemListe().size() == 0) {
					InOut.textAusgeben(Textbaustein.INVENTAR_KEINE_GEGENSTAENDE);
				} else {
					InOut.textAusgeben(Textbaustein.INVENTAR_UEBERSCHRIFT);
					for (Item itemImInventar : this.welt.getHeld()
							.getItemListe()) {
						InOut.textAusgeben(itemImInventar.getBezeichnung()
								+ " (" + itemImInventar.getSchaden()
								+ " Schaden)");
					}
				}

				break;
			default:

				InOut.textAusgeben(Textbaustein.AKTION_NICHT_MOEGLICH);
				break;
			}
		}

		else if (parser.getAnzahlWoerter() == 2) {
			// Eingabe hat genau 2 Wörter
			switch (parser.getWort1()) {
			case "nimm":
				Befehle.nehmen(parser.getWort2(), welt.getHeld());
				break;
			case "bekämpfe":
				Befehle.kaempfen(parser.getWort2(), welt.getHeld());
				break;
			
			default:
				InOut.textAusgeben(Textbaustein.AKTION_NICHT_MOEGLICH);
				break;
			}
		} else {
			// Eingabe hat mehr als 2 Wörter
			InOut.textAusgeben(Textbaustein.AKTION_NICHT_MOEGLICH_MEHR_ALS_2_WOERTER);
		}

		this.userAktionAbfragen();

	}

	public void heldInNeuenRaumBewegen(Raum neuerRaum) {
		this.welt.getHeld().setAktuellerRaum(neuerRaum);
		String ausgabeInfoNPC = "";
		String ausgabeInfoItemInRaum = "";
		String ausgabeInfoN = "";
		String ausgabeInfoW = "";
		String ausgabeInfoS = "";
		String ausgabeInfoO = "";

		if (neuerRaum.getItem() != null) {
			ausgabeInfoItemInRaum = "Oh, da liegt: "
					+ neuerRaum.getItem().getBezeichnung();
		} else {
			ausgabeInfoItemInRaum = "Leider liegt hier nix herum :-(";
		}
		if (neuerRaum.getNpc() != null) {
			ausgabeInfoNPC = "Es hängt herum: " + neuerRaum.getNpc().getName()
					+ " (Gesundheit: " + neuerRaum.getNpc().getGesundheit()
					+ ", Schaden: " + neuerRaum.getNpc().getSchaden() + ")";
			// Provariante: Prüfen, ob NPC bereits besiegt wurde
			if (!neuerRaum.getNpc().isIstAmLeben()) {
				ausgabeInfoNPC += "\n Er ist leider tot!";
			}
		} else {
			ausgabeInfoNPC = "";
		}

		if (neuerRaum.getN() != null) {
			ausgabeInfoN = "es geht nach Norden weiter.";
		}
		if (neuerRaum.getW() != null) {
			ausgabeInfoW = "es geht nach Westen weiter.";
		}
		if (neuerRaum.getS() != null) {
			ausgabeInfoS = "es geht nach Süden weiter.";
		}
		if (neuerRaum.getO() != null) {
			ausgabeInfoO = "es geht nach Osten weiter.";
		}

		InOut.textAusgeben(neuerRaum.getName());
		InOut.textAusgeben(neuerRaum.getBeschreibung());
		InOut.textAusgeben(ausgabeInfoNPC);
		InOut.textAusgeben(ausgabeInfoItemInRaum);
		InOut.textAusgeben(ausgabeInfoN);
		InOut.textAusgeben(ausgabeInfoW);
		InOut.textAusgeben(ausgabeInfoS);
		InOut.textAusgeben(ausgabeInfoO);

	}

}
