
public class FileToboggan {
	Enfant courant;
	int nbMax;

	public FileToboggan(int nbMax) {
		this.nbMax = nbMax;
		this.courant = null;
	}

	public boolean estVide() {
		return (this.courant == null);
	}
	
	public boolean aUn() {
		return (this.courant == this.courant.suivant);
	}

	public void ajouter(String nom, int nb) {
		if(this.estVide()) {
			Enfant Sam = new Enfant(nom, nb);
			this.courant = Sam;
			Sam.precedent = Sam;
			Sam.suivant = Sam;
		}
		else {
			Enfant Tommaso = new Enfant(nom, nb);
			Enfant Sam = this.courant;
			Enfant Mathieu = this.courant.precedent;

			Tommaso.precedent = Mathieu;
			Tommaso.suivant = Sam;
			Mathieu.suivant = Tommaso;
			Sam.precedent = Tommaso;
		}
	}

	public void supprimer(String nom) {
		if(this.estVide()) {
			return;
		}

		if(this.aUn() && this.courant.nom.equals(nom)) {
			this.courant = null;
			return;
		}

		Enfant temp = this.courant;

		if(temp.nom.equals(nom)) {
			temp.precedent.suivant = temp.suivant;
			temp.suivant.precedent = temp.precedent;
			this.courant = this.courant.suivant;
			return;
		}
		else {
			temp = temp.suivant;
			while(temp != this.courant) {
				if(temp.nom.equals(nom)) {
					temp.precedent.suivant = temp.suivant;
					temp.suivant.precedent = temp.precedent;
				}
				temp = temp.suivant;
			}
		}
	}

	public void afficher() {
		if(this.estVide()) {
			return;
		}
		Enfant temp = this.courant;
		do {
			System.out.println(temp.nom);
			temp = temp.suivant;
		}
		while(temp != this.courant);
	}

	public void supprimerCourant() {
		if(this.estVide()) {
			return;
		}
		if(this.aUn()) {
			this.courant = null;
			return;
		}
		courant.precedent.suivant = courant.suivant;
		courant.suivant.precedent = courant.precedent;
		courant = courant.suivant;
		return;
	}

	public Enfant unTour() {
		if(this.estVide()) {
			return null;
		}
		System.out.println(this.courant.nom + " " + this.courant.nb);
		String Sam = this.courant.nom;
		int SamNb = this.courant.nb;
		if(this.courant.nb < this.nbMax) {
			this.supprimerCourant();
			this.ajouter(Sam, SamNb + 1);
			return null;
		}
		else {
			this.supprimerCourant();
			return new Enfant(Sam, SamNb);
		}
	}

	public Enfant unTourAlea() {
		if(this.estVide()) {
			return null;
		}
		System.out.println(this.courant.nom);
		if(this.courant.nb < this.nbMax) {
			String Sam = this.courant.nom;
			int SamNb = this.courant.nb;
			this.supprimerCourant();
			if(Math.random() > 0.5) {
				this.ajouter(Sam, SamNb + 1);
			}
			return null;
		}
		else {
			this.supprimerCourant();
			return this.courant;
		}
	}
}
