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 "n":
				if (aktuellerRaum.getN() != null) {
					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 "o":
				if (aktuellerRaum.getO() != null) {
					this.heldInNeuenRaumBewegen(aktuellerRaum.getO());
				} else {
					InOut.textAusgeben(Textbaustein.RICHTUNG_NICHT_MOEGLICH);
				}
				break;
			case "w":
				if (aktuellerRaum.getW() != null) {
					this.heldInNeuenRaumBewegen(aktuellerRaum.getW());
				} else {
					InOut.textAusgeben(Textbaustein.RICHTUNG_NICHT_MOEGLICH);
				}
				break;
			case "h":
				InOut.textAusgeben(Textbaustein.HILFETEXT);
				break;
			default:

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

		else if (parser.getAnzahlWoerter() == 2) {
			// Eingabe hat genau 2 Wörter
			InOut.textAusgeben("Du hast 2 Wörter eingegeben");
			switch (parser.getWort1()) {
			case "nimm":
				Befehle.nehmen(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 = "";
		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 = "";
		}
		InOut.textAusgeben(neuerRaum.getName());
		InOut.textAusgeben(neuerRaum.getBeschreibung());
		InOut.textAusgeben(ausgabeInfoNPC);
		InOut.textAusgeben(ausgabeInfoItemInRaum);

	}

}
