package de.jaujau.UnitTests;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

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

class TEST_Kartensatz {

	private Kartensatz satz;
	
	@BeforeEach
	public void Setup() {
		satz = new Kartensatz();
		assertNotNull(satz);
	}
	
	@Test
	void ziehenSpieler() {
		for(int i = 0; i < 32; i++) {
			//Spieler hat zu anfang keine Karten auf der Hand
			assertTrue(satz.getHand(Spieler.SPIELER).size()==i);
			
			//Karte Ziehen
			assertTrue(satz.ziehen(Spieler.SPIELER));
			
			//Spieler hat eine Karte auf der Hand
			assertTrue(satz.getHand(Spieler.SPIELER).size()==i+1);
		}
	}

	@Test
	void ziehenComputer() {
		for(int i = 0; i < 32; i++) {
			//Computer hat zu angang keine Karten auf der Hand
			assertTrue(satz.getHand(Spieler.SPIELER).size()==i);
			
			//Karte Ziehen
			assertTrue(satz.ziehen(Spieler.SPIELER));
			
			//Computer hat eine Karte auf der Hand
			assertTrue(satz.getHand(Spieler.SPIELER).size()==i+1);
		}
	}
	
	@Test
	void WunschfarbeSetzen() {
		satz.SetWunschfarbe(Farbe.HERZ);
		assertTrue(satz.getKarte(satz.getletzteKarte()).getFARBE()==Farbe.HERZ);
		
		satz.SetWunschfarbe(Farbe.KARO);
		assertTrue(satz.getKarte(satz.getletzteKarte()).getFARBE()==Farbe.KARO);
		
		satz.SetWunschfarbe(Farbe.KREUZ);
		assertTrue(satz.getKarte(satz.getletzteKarte()).getFARBE()==Farbe.KREUZ);
		
		satz.SetWunschfarbe(Farbe.PIK);
		assertTrue(satz.getKarte(satz.getletzteKarte()).getFARBE()==Farbe.PIK);
	}
	
	@Test
	void legeKarte() {
		
		//Kein Spieler hat ein Karte
		assertTrue(satz.getHand(Spieler.SPIELER).size()==0);
		assertTrue(satz.getHand(Spieler.COMPUTER).size()==0);
		
		//Computer und Spieler Zihen jeweils eine Karte
		assertTrue(satz.ziehen(Spieler.SPIELER));
		assertTrue(satz.ziehen(Spieler.COMPUTER));
		
		//Jetzt muss jeder Spieler ein KArte auf der Hand haben
		assertTrue(satz.getHand(Spieler.SPIELER).size()==1);
		assertTrue(satz.getHand(Spieler.COMPUTER).size()==1);
		
		//KartenIndex der Spieler auslesen
		int karteSpieler = satz.getHand(Spieler.SPIELER).get(0);
		int karteComputer = satz.getHand(Spieler.COMPUTER).get(0);
		
		//Die Karten drüfen nicht gleich sein
		assertTrue(karteSpieler != karteComputer);
		
		//Spieler legt Karte auf Ablagestapel
		satz.ablegen(karteSpieler);
		assertTrue(karteSpieler == satz.getletzteKarte());
		assertTrue(satz.getHand(Spieler.SPIELER).size()==0);
		
		//Computer legt Karte auf Ablagestapel
		satz.ablegen(karteComputer);
		assertTrue(karteComputer == satz.getletzteKarte());
		assertTrue(satz.getHand(Spieler.COMPUTER).size()==0);
		
	}
}
