package Controleurs;
import javax.swing.*;
import java.awt.event.*;
import modele.joueur;
import IHM.IHMmonopoly;
/**
 * Cette classe est l'écouteur du bouton "procéder à l'échange" dans la fenêtre d'échange.
 * Elle vérifie que toutes les valeurs choisies par les utilisateurs sont valides et compatible et procède à l'échange si c'est possible
 * @author Emilie Collasse,Cynthia Fong,Salma Zaghloul
 * @version 1.0
 *
 */
public class EcouteurBoutonEchange implements ActionListener{
	joueur j1,j2;
	JTextField J1TF,J2TF;
	JComboBox B1,B2;
	IHMmonopoly monop;
	JFrame f;
	JPanel pJ;
	
	public EcouteurBoutonEchange(JFrame f,JPanel pJ,joueur j1,joueur j2,JTextField J1TF,JTextField J2TF,JComboBox B1,JComboBox B2,IHMmonopoly monop){
		this.j1=j1;
		this.j2=j2;
		this.J1TF=J1TF;
		this.J2TF=J2TF;
		this.B1=B1;
		this.B2=B2;
		this.monop=monop;
		this.f=f;
		this.pJ=pJ;
	}
	public void actionPerformed(ActionEvent e){
		String s1TF=J1TF.getText();
		String s2TF=J2TF.getText();
		if (s1TF.equals("")&&((String)(B1.getSelectedItem())).equals("Aucune"))
			JOptionPane.showMessageDialog(null, j1.getNom()+" n'a rien sélectionné pour l'échange","",JOptionPane.ERROR_MESSAGE);
		else {
			if (s2TF.equals("")&&((String)(B2.getSelectedItem())).equals("Aucune"))
				JOptionPane.showMessageDialog(null, j2.getNom()+" n'a rien sélectionné pour l'échange","",JOptionPane.ERROR_MESSAGE);
			else {
				if (s1TF.length()!=0){
					try{
						int d1TF=Integer.parseInt(s1TF);
						if (d1TF>0){
							if (((String)(B2.getSelectedItem())).equals("Aucune"))
								JOptionPane.showMessageDialog(null, "Vous devez échanger de l'argent contre une propriété de "+j2.getNom(),"Erreur",JOptionPane.ERROR_MESSAGE);
							else {
								if (d1TF>j1.getArgent())
									JOptionPane.showMessageDialog(null, j1.getNom()+" ne possède pas assez d'argent","Erreur",JOptionPane.ERROR_MESSAGE);
								else{
									String choixPropJ2=(String)(B2.getSelectedItem());
									int index=choixPropJ2.indexOf(" ");
									int numProp=Integer.parseInt(choixPropJ2.substring(0,index));
									if (numProp>=j2.getPossessions().size()){//carteprison
										j1.ajouterCartePrison();
										j2.enleverCartePrison();
										j1.payerFraisIHM(d1TF, monop.getListeJoueurs(), monop.getBanque(), monop);
										j2.recevoirArgent(d1TF);
										JOptionPane.showMessageDialog(null, "L'échange a eu lieu","",JOptionPane.INFORMATION_MESSAGE);
										pJ.repaint();
										f.dispose();
									}
									else {//propriete
										j1.acheter(j2.getPossessions().get(numProp), (int)(d1TF));
										j2.enleverProp(j2.getPossessions().get(numProp));
										j2.recevoirArgent(d1TF);
										JOptionPane.showMessageDialog(null, "L'échange a eu lieu","",JOptionPane.INFORMATION_MESSAGE);
										pJ.repaint();
										f.dispose();
									}
								}
							}
						}
						else {
							JOptionPane.showMessageDialog(null, "Rentrez une valeur d'argent positive pour "+j1.getNom(),"Erreur",JOptionPane.ERROR_MESSAGE);
						}
					}catch(Exception ex){
						JOptionPane.showMessageDialog(null, "Mauvaise valeur d'argent proposée pour "+j1.getNom()+"\nDonnez un entier","Erreur",JOptionPane.ERROR_MESSAGE);
					}
				}
				else {
					if (s2TF.length()!=0){
						try{
							int d2TF=Integer.parseInt(s2TF);
							if (d2TF>0.0){
								if (((String)(B1.getSelectedItem())).equals("Aucune"))
									JOptionPane.showMessageDialog(null, "Vous devez échanger de l'argent contre une propriété de "+j1.getNom(),"Erreur",JOptionPane.ERROR_MESSAGE);
								else {
									if (d2TF>j2.getArgent())
										JOptionPane.showMessageDialog(null, j2.getNom()+" ne possède pas assez d'argent","Erreur",JOptionPane.ERROR_MESSAGE);
									else{
										String choixPropJ1=(String)(B1.getSelectedItem());
										int index=choixPropJ1.indexOf(" ");
										int numProp=Integer.parseInt(choixPropJ1.substring(0,index));
										if (numProp>=j1.getPossessions().size()){//carteprison
											j2.ajouterCartePrison();
											j1.enleverCartePrison();
											j2.payerFraisIHM(d2TF, monop.getListeJoueurs(), monop.getBanque(), monop);
											j1.recevoirArgent(d2TF);
											JOptionPane.showMessageDialog(null, "L'échange a eu lieu","",JOptionPane.INFORMATION_MESSAGE);
											pJ.repaint();
											f.dispose();
										}
										else {//propriete
											j2.acheter(j1.getPossessions().get(numProp), (int)(d2TF));
											j1.enleverProp(j1.getPossessions().get(numProp));
											j2.recevoirArgent(d2TF);
											JOptionPane.showMessageDialog(null, "L'échange a eu lieu","",JOptionPane.INFORMATION_MESSAGE);
											pJ.repaint();
											f.dispose();
										}
									}
								}
							}
							else {
								JOptionPane.showMessageDialog(null, "Rentrez une valeur d'argent positive pour "+j2.getNom(),"Erreur",JOptionPane.ERROR_MESSAGE);
							}
						}catch(Exception ex){
							JOptionPane.showMessageDialog(null, "Mauvaise valeur d'argent proposée pour "+j2.getNom()+"\nDonnez un entier","Erreur",JOptionPane.ERROR_MESSAGE);
						}
					}
					else {//pas dargent proposé 
						if (((String)(B2.getSelectedItem())).equals("Aucune")||((String)(B1.getSelectedItem())).equals("Aucune")){
							JOptionPane.showMessageDialog(null, "Erreur","Erreur",JOptionPane.ERROR_MESSAGE);
						}
						else {
							String choixPropJ1=(String)(B1.getSelectedItem());
							int index1=choixPropJ1.indexOf(" ");
							int numProp1=Integer.parseInt(choixPropJ1.substring(0,index1));
							String choixPropJ2=(String)(B2.getSelectedItem());
							int index2=choixPropJ2.indexOf(" ");
							int numProp2=Integer.parseInt(choixPropJ2.substring(0,index2));
							if (numProp1>=j1.getPossessions().size()){
								j2.ajouterCartePrison();
								j1.enleverCartePrison();
							}
							if (numProp2>=j2.getPossessions().size()){
								j2.enleverCartePrison();
								j1.ajouterCartePrison();
							}
							if(numProp2<j2.getPossessions().size()){
								j1.acheter(j2.getPossessions().get(numProp2), 0);
								j2.enleverProp(j2.getPossessions().get(numProp2));
							}
							if (numProp1<j1.getPossessions().size()){
								j2.acheter(j1.getPossessions().get(numProp1), 0);
								j1.enleverProp(j1.getPossessions().get(numProp1));
							}
							JOptionPane.showMessageDialog(null, "L'échange a eu lieu","",JOptionPane.INFORMATION_MESSAGE);
							pJ.repaint();
							f.dispose();
						}
					}
				}
			}
		}
	}
}
