/**
*Programme cree par The Clusters
*Classe de IHM graphique qui permet de joindre une partie
*Le plateau doit deja etre cree ( un serveur doit etre lance )
* @author The Clusters
*@version 1.0
**/


package chkoba;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Scanner;
import java.util.Properties;
import java.util.ArrayList;

import chkoba.*;

/**
*	Classe Joindre
*/

public class Joindre extends JFrame implements ActionListener 
{
	private JPanel pDecorateur, pGeneral, pBouton, pSudBouton, pServ, pNbrJoueurs;
	private JButton joindre, retour;
	private JTextField tnomhost, nom, tNbrJoueurs;
	private JLabel lnomhost, lDecoN, lDecoS, lDecoO, lDecoE, labelNom, lNbrJoueurs;
	private Index ind;
	private static Properties pro;
	private static PropertiesPerso propers;

	public Joindre(Index i)
	{
		setTitle("Joindre une partie");
		setLocation(50,100);
		setResizable(false);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setIconImage(Toolkit.getDefaultToolkit().getImage(Joindre.class.getResource("/icone.png")));	//permet de changer l'image dans le haut de la frame
			
		ind=i;
		
		/* Creation des panels */
		pGeneral = new JPanel();
		pNbrJoueurs = new JPanel();
		pServ = new JPanel();
		pDecorateur = new JPanel();
		pBouton = new JPanel();
		pSudBouton = new JPanel();
		
		
		/* Changement d'etat des panels */
		pDecorateur.setLayout(new BorderLayout());
		pGeneral.setLayout(new BorderLayout());
		pNbrJoueurs.setLayout(new BorderLayout());
		pServ.setLayout(new BorderLayout());
		pBouton.setLayout(new FlowLayout());
		pSudBouton.setLayout(new BorderLayout());
		
		
		/* Ajout du Panel principal */
		add(pDecorateur);
		pDecorateur.add(pGeneral);
		
		
		/* On s'occupe de la deco */
		lDecoN = new JLabel(" ");
		lDecoS = new JLabel(" ");
		lDecoO = new JLabel("       ");
		lDecoE = new JLabel("       ");
		
		pDecorateur.add(lDecoN, "North");
		pDecorateur.add(lDecoS, "South");
		pDecorateur.add(lDecoO, "West");
		pDecorateur.add(lDecoE, "East");
		
		lDecoN.setSize(500,100);
		lDecoS.setSize(500,100);
		lDecoO.setSize(100,300);
		lDecoE.setSize(100,300);
		
		lDecoN.setBackground(Color.LIGHT_GRAY);
		lDecoN.setOpaque(true); // permet de rendre le label opaque et non plus transparent
		lDecoS.setBackground(Color.LIGHT_GRAY);
		lDecoS.setOpaque(true);
		lDecoO.setBackground(Color.LIGHT_GRAY);
		lDecoO.setOpaque(true);
		lDecoE.setBackground(Color.LIGHT_GRAY);
		lDecoE.setOpaque(true);
		
		tNbrJoueurs=new JTextField("");
		lNbrJoueurs=new JLabel("Entrez le nombre de joueurs de la partie");
		pNbrJoueurs.add(lNbrJoueurs,"North");
		pNbrJoueurs.add(tNbrJoueurs, "Center");
		pGeneral.add(pNbrJoueurs,"North");
		
		/* On s'occupe du label */
		lnomhost = new JLabel("Veuillez confirmer le nom de serveur :");
		lnomhost.setOpaque(true);
		
		/* On s'occupe du textfield */
		try
		{
			propers=new PropertiesPerso();
			pro=propers.loadProperties();
		}
		catch ( Exception e)
		{
			e.printStackTrace();
		}
		
		String str=pro.getProperty("rmi.host");
		tnomhost = new JTextField(""+str);
		pServ.add(lnomhost,"North");
		pServ.add(tnomhost, "Center");
		pGeneral.add(pServ,"Center");
		
		/* On s'occupe des boutons */
		joindre = new JButton("Joindre");
		retour = new JButton("Retour");
		joindre.addActionListener(this);
		retour.addActionListener(this);
		pBouton.add(joindre);
		pBouton.add(retour);
		
		nom=new JTextField("");
		labelNom=new JLabel("Entrez votre nom");
		pSudBouton.add(labelNom,"North");
		pSudBouton.add(nom,"Center");
		pSudBouton.add(pBouton, "South");
		pGeneral.add(pSudBouton, "South");
		
		
		/* On change la couleur de fond */
		pSudBouton.setBackground(Color.LIGHT_GRAY);
		lnomhost.setBackground(Color.LIGHT_GRAY);
		pBouton.setBackground(Color.LIGHT_GRAY);
		pNbrJoueurs.setBackground(Color.LIGHT_GRAY);
		
		pack();
		setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource() == retour)
		{
			setVisible(false);
			ind.setVisible(true);
		}
		else if (e.getSource() == joindre)
		{
			boolean b=false;
			
			while (!b)
			{
				try
				{
					Thread.sleep(1000);
				}
				catch ( InterruptedException ie)
				{
					ie.printStackTrace();
				}
					
				if ( nom.getText().equals("") == false && tnomhost.getText().equals("") == false && tNbrJoueurs.getText().equals("") ==false)
				{
					try
					{
						b=true;
						ArrayList<Integer> bidon=new ArrayList<Integer>();
						
						if ( Integer.parseInt(tNbrJoueurs.getText()) == 2 )
							new IHMPlateau(ind, false, 0, nom.getText(), 0, 0);
						else if ( Integer.parseInt(tNbrJoueurs.getText()) == 4 )
							new IHMPlateau4j(ind, false, bidon, bidon, 0, nom.getText(), 0, 0);
						else
						{
							JOptionPane conf = new JOptionPane();
							conf.showMessageDialog(null,"Ce n'est pas un nombre de joueurs valide","Alerte", conf.WARNING_MESSAGE);
						}
					}
					catch(Exception exc)
					{
						exc.printStackTrace();
					}
					
					setVisible(false);
				}
				else
				{
					JOptionPane conf = new JOptionPane();
					conf.showMessageDialog(null,"Les informations ne sont pas completes","Alerte", conf.WARNING_MESSAGE);
				}
			}
		}	
	}
}