package carte.belote;
/**
 * classe pour un embryon de jeu de belote
 *
 * @author Matthias Colin
 * @version 1.0 (31/05/2011)
 */ 

import java.util.*;
import carte.*;

public class Belote {

	/**
	 * initialiser la main des 4 joueurs
	 * @return la liste des 4 mains
	 */
	public static List<Main> initialiserMains() {
		List<Main> mains = new ArrayList<Main>(4);
		for (int i = 0 ; i < 4 ; i++) {
			mains.add(new Main());
		}
		return mains;
	}
	
	/**
	 * 1er tour de distribution de 5 cartes aux 4 joueurs
	 * @param jeu le paquet de carte
	 * @param mains les mains des 4 joueurs
	 * @return la carte retournée après distribution de 20 cartes
	 */
	public static Carte distribuerDebut(Jeu jeu, List<Main> mains) {
		if (jeu == null) {
			throw new IllegalArgumentException("Le jeu n'est pas valide.");
		}
		if (mains == null) {
			throw new IllegalArgumentException("Les mains des joueurs ne sont pas valides.");
		}
		if (jeu.taille() != 32) {
			throw new IllegalArgumentException("Le jeu n'est pas complet pour commencer à distribuer");
		}
		if (mains.size() != 4) {
			throw new IllegalArgumentException("Il faut 4 joueurs à la belote et pas : " + mains.size());
		}
		for (int i=0; i<4; i++) {
			if (!mains.get(i).estVide()) {
				throw new IllegalArgumentException("Il reste des cartes au joueur " + i);
			}
		}
		for (Main main : mains) {
			jeu.distribuer(main,3);
		}
		for (Main main : mains) {
			jeu.distribuer(main,2);
		}
		// on renvoie le sommet du jeu en l'enlevant
		return jeu.retournerCarte();
	}
	
	/**
	 * 2ème tour de distribution des cartes aux 4 joueurs.
	 * Le joueur qui prend reçoit la carte retournée + 2 autres cartes du paquet.
	 * Les autres reçoivent 3 cartes du paquet.
	 * @param jeu le paquet de carte
	 * @param mains les mains des 4 joueurs
	 * @param atout la carte retournée
	 * @param mainPrenante le joueur qui prend
	 */
	public static void distribuerFin(Jeu jeu, List<Main> mains, Carte atout, int mainPrenante) {
		if (jeu == null) {
			throw new IllegalArgumentException("Le jeu n'est pas valide.");
		}
		if (mains == null) {
			throw new IllegalArgumentException("Les mains des joueurs ne sont pas valides.");
		}
		if (jeu.taille() != 11) {
			throw new IllegalArgumentException("Il n'y a pas assez de cartes pour finir la distribution");
		}
		if (mains.size() != 4) {
			throw new IllegalArgumentException("Il faut 4 joueurs à la belote et pas : " + mains.size());
		}
		for (int i=0; i<4; i++) {
			if (mains.get(i).taille() != 5) {
				throw new IllegalArgumentException("Le joueur " + i + " n'a pas les 5 cartes du 1er tour");
			}
		}
		for (int i=0; i<4; i++) {
			if (i == mainPrenante) {
				jeu.distribuer(mains.get(i),2);
				mains.get(i).donner(atout);
			} else {
				jeu.distribuer(mains.get(i),3);
			}
		}
	}
}