package Controleurs;
import IHM.IHMmonopoly;
import java.awt.event.*;
import IHM.IHMDe;
import IHM.IHMPlateau;
import IHM.IHMjoueur;

import javax.swing.*;

import modele.Banque;
import modele.plateau;
/**
 * Cette classe est l'écouteur du bouton lancer les dés.
 * Néanmoins ce bouton change de fonction au fil de la partie.
 * Il n'effectue pas la même chose selon l'état du joueur. 
 * Si le joueur n'a pas encore lancer les dés, le texte du bouton est "Lancer les dés" et quand on clique dessus, le joueur se déplace et effectue l'action de la case.
 * Si le joueur a déjà lancé les dés et n'a pas fait de double, le texte du bouton est "Passer la main" pour passer au joueur suivant.
 * Sinon le texte du bouton peut être à "Faire Faillite" si le joueur doit payer quelque chose et qu'il ne trouve pas l'argent nécessaire en hypothéquant ou vendant ses biens. A ce moment, le joueur est retiré de la partie.
 * @author Emilie Collasse,Cynthia Fong,Salma Zaghloul
 * @version 1.0
 *
 */
public class EcouteurDes implements ActionListener{
	protected IHMDe D1;
	protected IHMDe D2;
	protected JPanel p;
	protected IHMjoueur j;
	protected IHMPlateau platIHM;
	protected IHMmonopoly monop;
	protected JPanel pj;
	protected plateau plat;
	protected Banque bank;
	
	public EcouteurDes(IHMmonopoly monop,IHMDe D1,IHMDe D2,JPanel p, JPanel pj,IHMjoueur j,IHMPlateau platIHM,plateau plat,Banque bank){
		this.D1=D1;
		this.D2=D2;
		this.p=p;
		this.j=j;
		this.platIHM=platIHM;
		this.monop=monop;
		this.pj=pj;
		this.plat=plat;
		this.bank=bank;
	}
	public void actionPerformed(ActionEvent e){
		if (((JButton)e.getSource()).getText().equals("Lancer les dés")){
			D1.changerValeur();
			D2.changerValeur();
			p.repaint();
			if (D1.getVal()==D2.getVal()){
				j.getJoueur().setNbDoubles(1);
			}
			if (j.getJoueur().getNbDoubles()!=3){
				j.getJoueur().seDeplacerDeIHM(D1.getVal()+D2.getVal());
				platIHM.repaint();
				j.getJoueur().gererActionsCaseIHM(plat.getCase(j.getJoueur().getPositionY(),j.getJoueur().getPositionX()),plat,monop.getListeJoueurs(),bank,monop);
				if (D1.getVal()!=D2.getVal()||j.getJoueur().getEnPrison()){
					if (j.getJoueur().getDoitPayer()==0)
						((JButton)e.getSource()).setText("Passer la main");
				}
			}
			if (j.getJoueur().getNbDoubles()==3){
				JOptionPane.showMessageDialog(null, j.getJoueur().getNom()+", vous avez fait 3 doubles à la suite.\nVous allez en prison.");
				j.getJoueur().setNbDoubles(-3);
				j.getJoueur().setPosX(0);
				j.getJoueur().setPosY(10);
				j.getJoueur().setEstEnPrison(true);
				((JButton)e.getSource()).setText("Passer la main");
			}
			monop.getListeJoueurs().get(monop.getListeJoueurs().indexOf(j)).repaint();
			p.repaint();
			platIHM.repaint();
			j.repaint();
			pj.repaint();
		}
		else {//passer la main ou faire faillite
			if (((JButton)e.getSource()).getText().equals("Passer la main")){
				j.getJoueur().setNbDoubles(-j.getJoueur().getNbDoubles());
				monop.passerAuJoueurSuivant();
			}
			else {//faire faillite
				if (j.getJoueur().getDoitPayer()>j.getJoueur().getArgent()){
					int n=JOptionPane.showConfirmDialog(null, "Etes-vous sûr de vouloir faire faillite ?\nAvant de répondre oui, essayez toutes les possibilités pour trouver de l'argent.","Faillite",JOptionPane.YES_NO_OPTION);
					if (n==JOptionPane.YES_OPTION){
						if (!j.getJoueur().getPossessions().isEmpty()){
							//vendre toutes les proprietes aux enchères et penser à effacer le proprietaire ?
							//vendre les constructions a la banque
						}
						IHMmonopoly.joueurPerdant(j.getJoueur());
						monop.passerAuJoueurSuivant();
					}
				}
				else {//le joueur a trouvé assez d'argent
					j.getJoueur().payerFraisIHM(j.getJoueur().getDoitPayer(), monop.getListeJoueurs(), monop.getBanque(), monop);
					j.getJoueur().setDoitPayer();
					((JButton)e.getSource()).setText("Passer la main");
					j.repaint();
				}
			}
		}
	}
}
