package fr.iutbm.couchot.android_awale;

import java.io.Serializable;

public class Partie implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static final int JOUEUR0 = 0;
	public static final int JOUEUR1 = 1;
	public static final String VICTOIRE_JOUEUR0 = "Victoire Joueur 0";
	public static final String VICTOIRE_JOUEUR1 = "Victoire Joueur 1";
	public static final String PARTIE_NULLE = "Partie Nulle";
	public static final String INDETERMINE = "Partie en cours";
	
	
	
	private int joueur_actif = JOUEUR0;
	private int graines_joueur_0= 0;
	private int graines_joueur_1= 0;
	private int [] plateaux={4,4,4,4,4,4,4,4,4,4,4,4};
	private String status_partie=INDETERMINE;
	
	

	public void maj_status_partie(){
		String r = INDETERMINE ;
		int g0 = this.getGraines_joueur_0();
		int g1 = this.getGraines_joueur_1();
		if (g0 > 24)
			r = VICTOIRE_JOUEUR0;
		if (g1 > 24)
			r = VICTOIRE_JOUEUR1;
		if (48 -(g0 + g1)< 7){
			if (g0 > g1)
				r = VICTOIRE_JOUEUR0;
			if (g1 > g0)
				r = VICTOIRE_JOUEUR1;
			if (g1 == g0)
				r = PARTIE_NULLE;
		}
		this.setStatus_partie(r);
	}
	
	
	public boolean coup_legal(int cc){
		boolean r = true;
		// c'est le bon joueur qui joue
		if (getJoueur_actif() == JOUEUR0 && cc < 6)
			r = false;
		else { 
			if (getJoueur_actif() == JOUEUR1 && cc > 5)
				r = false;
			// il faut nourrir l'advesaire
			else{ 
					if (getJoueur_actif() == JOUEUR0 && 
							plateaux[0]+plateaux[1]+plateaux[2]+plateaux[3]+plateaux[4]+plateaux[5] == 0 &&
							plateaux[cc] < 12  - cc)
						r = false ;
					else {
						if (getJoueur_actif() == JOUEUR1 && 
								plateaux[11]+plateaux[10]+plateaux[9]+plateaux[8]+plateaux[7]+plateaux[6] == 0 &&
								plateaux[cc] < 6  - cc)
							r = false ;
					}
			}
		}
		return r ; 
	}
	
	public void a_joue(int cc){
		if (coup_legal(cc)){
			int idx = 0;
			int nbgraines = plateaux[cc];
			for (int i=0; i < nbgraines; i++){
				idx = (cc+i+1)%12; 
				if (idx != cc){
					plateaux[idx] +=1;
				}
				else{
					nbgraines += 1;
				}
			}
			plateaux[cc] = 0;
			// tester si on fait plus d'un tour
			
			while (getJoueur_actif() == JOUEUR0 && idx < 6 && (plateaux[idx]==2 || plateaux[idx]==3)){
				this.graines_joueur_0 += plateaux[idx];
				plateaux[idx] = 0;
				idx = (idx -1+24) % 12 ;
			}

			while (getJoueur_actif() == JOUEUR1 && idx > 6 && (plateaux[idx]==2 || plateaux[idx]==3)){
				this.graines_joueur_1 += plateaux[idx];
				plateaux[idx] = 0;
				idx = (idx -1+24) % 12 ;
			}
			this.maj_status_partie();
			this.setJoueur_actif(joueur_suivant());
			
			
			// ajouter le manger des graines
		}
	}
	
	
	
	public int joueur_suivant(){
		int r = JOUEUR0 ;
		if (this.getJoueur_actif() == JOUEUR0)
			r = JOUEUR1;
		return r;
	}
	
	
	
	
	
	public int getJoueur_actif() {
		return joueur_actif;
	}
	
	public void setJoueur_actif(int joueur_actif) {
		this.joueur_actif = joueur_actif;
	}

	public int getGraines_joueur_0() {
		return graines_joueur_0;
	}
	
	public void setGraines_joueur_0(int graines_joueur_0) {
		this.graines_joueur_0 = graines_joueur_0;
	}
	
	public int getGraines_joueur_1() {
		return graines_joueur_1;
	}
	
	public void setGraines_joueur_1(int graines_joueur_1) {
		this.graines_joueur_1 = graines_joueur_1;
	}
	
	public int[] getPlateaux() {
		return plateaux;
	}
	
	public void setPlateaux(int[] plateaux) {
		this.plateaux = plateaux;
	}


	public String getStatus_partie() {
		return status_partie;
	}


	public void setStatus_partie(String status_partie) {
		this.status_partie = status_partie;
	}
	
}