package de.jaujau.spiellogik;

import de.jaujau.daten.Kartensatz;
import de.jaujau.daten.Spielerdaten;
import de.jaujau.daten.Wert;

import java.util.ArrayList;

import de.jaujau.daten.Farbe;
import de.jaujau.daten.Spieler;


/**
 * Diese Klasse verwaltet Funktionen, die den Spielzug prüfen
 * @author Moritz Köppe
 */
public class Spielzug {

  //
  // Fields
  //
	
  private Kartensatz kartensatz;
	
 //
  // Constructors
  //
  public Spielzug (Kartensatz karten) {
	  kartensatz = karten;
  };
  
  /**
   * Funktion untersucht, ob die Karte die der Spieler zu legen versucht auch gelegt werden kann
   * Sollte der Spieler gerade aussetzen müssen, kann nur eine 8 gelegt werden
   * Muss der Spieler zwei Karten ziehen, kann nur eine 7 gelegt werden
   * Gilt nichts von beidem muss die Karte zur vorhergelegten passen
   * @param kartenindex Index der Karte die gelegt werden soll
   * @param boolean, muss Spieler ziehen?
   * @param boolean, muss Spieler aussetzen?
   * @return boolean
   */
  public boolean pruefeZug(int kartenindex, boolean ziehen, boolean aussetzen, Kartensatz karten) {

	  kartensatz = karten;
	  Farbe kartenfarbe = kartensatz.getKarte(kartenindex).getFARBE();
	  Wert kartenwert = kartensatz.getKarte(kartenindex).getWERT();
	  Wert letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT();
	  Farbe letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE();
	  System.out.println("SPIELZUG: Versucht Karte für Funktion: " + kartenindex);
	  System.out.println("SPIELZUG: Letzte Karte für Funktion: " + letztekartewert + " " + letztekartefarbe);
	  
	  if(aussetzen && kartenwert == Wert.ACHT) {
		  System.out.println("SPIELZUG: Bedingung 1");
		  return true;
	  }
	  else if(aussetzen && !(kartenwert == Wert.ACHT)) {
		  System.out.println("SPIELZUG: Bedingung 2");
		  return false;
	  }
	  else if (ziehen && kartenwert == Wert.SIEBEN) {
		  System.out.println("SPIELZUG: Bedingung 3");
		  return true;
	  }
	  else if (!aussetzen && !ziehen && ((kartenwert == letztekartewert || kartenfarbe == letztekartefarbe) || kartenwert == Wert.BUBE)) {
		  System.out.println("SPIELZUG: Bedingung 4");
		  System.out.println("SPIELZUG: Aussetzen: " + aussetzen + " ziehen:" + ziehen);
		  return true;
	  }
	  else {
		  System.out.println("SPIELZUG: Bedingung 5");
		  return false;
	  }
  }
  
  /**
   * Prüft, ob der Spieler eine Karte legen kann, indem jede Karte in der Hand des Spielers mit der Funktion pruefeZug geprüft wird
   * @param spieler, Spieler am Zug 
   * @param boolean, muss Spieler ziehen?
   * @param boolean, muss Spieler aussetzen?
   * @return boolean, wurde passende Karte gefunden?
   */
  public boolean zugMoeglich(Spieler spieler, boolean ziehen, boolean aussetzen, Kartensatz karten) {
	  kartensatz = karten;
	  boolean gefunden = false; 
	  ArrayList<Integer> Hand = kartensatz.getHand(spieler);
	  for (int i = 0; i < Hand.size(); i++) {
		  if (pruefeZug(Hand.get(i), ziehen, aussetzen, karten)) {
			  gefunden = true;
		  }
	  }
	  return gefunden;
  }
  ////
 
  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  //
  // Other methods
  //

  /**
   * @param        spieler
   * @param        kartensatz
   */
  public static void legen(Spielerdaten spieler, Kartensatz kartensatz)
  {
  }


  /**
   * @param        spieler
   * @param        kartensatz
   */
  public static void aussetzen(Spielerdaten spieler, Kartensatz kartensatz)
  {
  }


  /**
   * @param        spieler
   * @param        kartensatz
   * @param        anzahl
   */
  public static void ziehen(Spielerdaten spieler, Kartensatz kartensatz, int anzahl)
  {
  }


}
