/**
*Programme cree par The Clusters
*Classe de configuration du jeu "Chkoba"
*@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 chkoba.*;

/**
*	Classe Config
*/

public class Config extends JFrame implements ActionListener 
{
	private JPanel pDecorateur, pGeneral, pGauche, pDroitAvecBouton, pDroitSansBouton, pBouton, pGaucheTextField, pTextField, pGaucheRadioButton, pDifficulte, pChangeNom;
	private JTextField tJoueur1, tJoueur2, tJoueur3, tJoueur4;
	private JRadioButton rFacile, rMoyen, rDifficile;
	private ButtonGroup bg;
	private JLabel lDifficulte, lDecoN, lDecoS, lDecoO, lDecoE, lDecoE1, lDecoS1, lDecoO1, lDecoE2, lChangeNom, lDecoS2, lDecoO2, lDecoE3;
	private JButton sauvegarder, reinitialiser, quitter;
	
	/**
	*Constructeur permettant la creation de la fenetre de configuration
	*@param i Index
	*/
	public Config(Index i)
	{
		
		
		setTitle("Chkoba - Panneau de configuration");
		setSize(550,350);
		setResizable(false);
		setIconImage(Toolkit.getDefaultToolkit().getImage(Config.class.getResource("/icone.png")));	//permet de changer l'image dans le haut de la frame
		
		/* Creation des panels */
		
		pGeneral = new JPanel();
		pGauche = new JPanel();
		pDroitAvecBouton = new JPanel();
		pDroitSansBouton = new JPanel();
		pBouton = new JPanel();
		pDecorateur = new JPanel();
		pGaucheTextField = new JPanel();
		pTextField = new JPanel();
		pGaucheRadioButton = new JPanel();
		pDifficulte = new JPanel();
		pChangeNom = new JPanel();
		
		/* Changement d'etat des panels */
		
		pDecorateur.setLayout(new BorderLayout());
		pGeneral.setLayout(new BorderLayout());
		pGauche.setLayout(new BorderLayout());
		pDroitAvecBouton.setLayout(new BorderLayout());
		pDroitSansBouton.setLayout(new BorderLayout());
		pBouton.setLayout(new FlowLayout());
		pGaucheTextField.setLayout(new BorderLayout());
		pTextField.setLayout(new GridLayout(4,1));
		pGaucheRadioButton.setLayout(new GridLayout(3,1));
		pDifficulte.setLayout(new BorderLayout());
		pChangeNom.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);
		
		/* On s'occupe de la partie gauche avec les textfields */
		
		tJoueur1 = new JTextField("Joueur 1");
		tJoueur2 = new JTextField("Joueur 2");
		tJoueur3 = new JTextField("Joueur 3");
		tJoueur4 = new JTextField("Joueur 4");
		pTextField.add(tJoueur1);
		pTextField.add(tJoueur2);
		pTextField.add(tJoueur3);
		pTextField.add(tJoueur4);
		
		/* On s'occupe de la deco des textfield */
		
		lChangeNom = new JLabel("Changement des noms :  ");
		lDecoS2 = new JLabel(" ");
		lDecoO2 = new JLabel("       ");
		lDecoE3= new JLabel("       ");
		
		pChangeNom.add(lChangeNom, "North");
		pChangeNom.add(lDecoS2, "South");
		pChangeNom.add(lDecoO2, "West");
		pChangeNom.add(lDecoE3, "East");
		
		lChangeNom.setSize(500,100);
		lDecoS2.setSize(500,100);
		lDecoO2.setSize(100,300);
		lDecoE3.setSize(100,300);
		
		lChangeNom.setBackground(Color.LIGHT_GRAY);
		lChangeNom.setOpaque(true); 				// permet de rendre le label opaque et non plus transparent
		lDecoS2.setBackground(Color.LIGHT_GRAY);
		lDecoS2.setOpaque(true);
		lDecoO2.setBackground(Color.LIGHT_GRAY);
		lDecoO2.setOpaque(true);
		lDecoE3.setBackground(Color.LIGHT_GRAY);
		lDecoE3.setOpaque(true);
		
		/* On ajoute le panel de textfield au panel superieur */
		
		pGaucheTextField.add(pTextField);
		pChangeNom.add(pGaucheTextField);
		
		/* On ajoute le label de decoration a cote des textfield */
		
		lDecoE1 = new JLabel("         ");
		lDecoE1.setOpaque(true);
		pGaucheTextField.add(lDecoE1, "East");
		lDecoE1.setBackground(Color.LIGHT_GRAY);
		pTextField.setBackground(Color.LIGHT_GRAY);
		
		/* On ajoute le panel de gauche textfidl+ panel au panel gerant toute la gauche */
		
		pGauche.add(pChangeNom);
		
		/* On s'occupe maintenant de la difficulte et des Radio */
		
		bg = new ButtonGroup();
		rFacile = new JRadioButton("Facile");
		rMoyen = new JRadioButton("Moyen");
		rDifficile = new JRadioButton("Difficile");
		bg.add(rFacile);
		bg.add(rMoyen);
		bg.add(rDifficile);
		pGaucheRadioButton.add(rFacile);
		pGaucheRadioButton.add(rMoyen);
		pGaucheRadioButton.add(rDifficile);
		rMoyen.setSelected(true);
		
		
		/* On ajoute le panel des radio au panel deco du sud */
		
		pDifficulte.add(pGaucheRadioButton);
		
		/* Remettre la configuration precedente */
		
		this.rechercheConfig();
		
		/* On s'occupe de la deco du panel de difficulte */
		
		lDifficulte = new JLabel("Difficulte : ");
		lDecoS1 = new JLabel(" ");
		lDecoO1 = new JLabel("       ");
		lDecoE2= new JLabel("       ");
		
		pDifficulte.add(lDifficulte, "North");
		pDifficulte.add(lDecoS1, "South");
		pDifficulte.add(lDecoO1, "West");
		pDifficulte.add(lDecoE2, "East");
		
		lDifficulte.setSize(500,100);
		lDecoS1.setSize(500,100);
		lDecoO1.setSize(100,300);
		lDecoE2.setSize(100,300);
		
		lDifficulte.setBackground(Color.LIGHT_GRAY);
		lDifficulte.setOpaque(true); 				// permet de rendre le label opaque et non plus transparent
		lDecoS1.setBackground(Color.LIGHT_GRAY);
		lDecoS1.setOpaque(true);
		lDecoO1.setBackground(Color.LIGHT_GRAY);
		lDecoO1.setOpaque(true);
		lDecoE2.setBackground(Color.LIGHT_GRAY);
		lDecoE2.setOpaque(true);
		
		/* On ajoute le panel de decoration sud au panel de gauche */
		
		pGauche.add(pDifficulte, "South");
		
		/* On ajoute la panel gauche au panel general */
		
		pGeneral.add(pGauche);
		
		/* On s'occupe a present de la partie droite */
		
		/* On ajoute les stats de droite au panel regissant la partie droite */
		
		pDroitAvecBouton.add(pDroitSansBouton);
		pDroitSansBouton.setBackground(Color.LIGHT_GRAY);
		
		/* On ajoute les deux boutons au sud du panel regissant la partie droite */
		
		sauvegarder = new JButton("Sauvegarder");
		sauvegarder.addActionListener(this);
		pBouton.add(sauvegarder);
		
		reinitialiser = new JButton("Reinitialiser");
		reinitialiser.addActionListener(this);
		pBouton.add(reinitialiser);
		pBouton.setBackground(Color.LIGHT_GRAY);
		
		quitter = new JButton("Quitter");
		quitter.addActionListener(this);
		pBouton.add(quitter); 
		
		/* On ajoute le panel de bouton au sud du panel de droite */
		
		pDroitAvecBouton.add(pBouton, "South");
		pDroitAvecBouton.setBackground(Color.LIGHT_GRAY);
		
		/* On ajoute le panel de droite au panel principal */
		
		pGeneral.add(pDroitAvecBouton, "East");
		
		
		setVisible(true);
	}
	
	/**
	*On va aller rechercher de la meme facon que dans Affichage.java la configuration sauvegardee precedemment
	*Ceci au moyen de la lecture dans un fichier, different, appele config.txt sauf que la on va aller chercher 
	*plusieurs choses et que ce sont des string pour la plupart
	*/
	public void rechercheConfig()
	{
		JOptionPane conf = new JOptionPane();
		try
		{
			
			FileReader fr = new FileReader ("config.txt");
			Scanner scan = new Scanner(fr);
			scan.useDelimiter("\t");
			while (scan.hasNext()) 
			{
				String joueur1 = scan.next();
				String joueur2 = scan.next();
				String joueur3 = scan.next();
				String joueur4 = scan.next();
				String difficulte = scan.next();
				tJoueur1.setText(joueur1);
				tJoueur2.setText(joueur2);
				tJoueur3.setText(joueur3);
				tJoueur4.setText(joueur4);
				if (difficulte.equals("1"))
					rFacile.setSelected(true);
				else if (difficulte.equals("2"))
						rMoyen.setSelected(true);
					else if (difficulte.equals("3"))
							rDifficile.setSelected(true);
						else
							rMoyen.setSelected(true);
			}
		}
		catch (Exception ex)
		{
			conf.showMessageDialog(null,"Erreur dans la lecture du fichier !","Alerte", conf.WARNING_MESSAGE);
		}
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource() == quitter)
			setVisible(false);
		else if (e.getSource() == reinitialiser)
			{
				rMoyen.setSelected(true);
				
				tJoueur1.setText("Joueur 1");
				tJoueur2.setText("Joueur 2");
				tJoueur3.setText("Joueur 3");
				tJoueur4.setText("Joueur 4");
			}
			else
			{
				JOptionPane conf = new JOptionPane();
				try
				{
					BufferedWriter save = new BufferedWriter(new FileWriter("config.txt", false));
					PrintWriter pw = new PrintWriter(save);
					String s="";
						
					s += tJoueur1.getText()+"\t"+tJoueur2.getText()+"\t"+tJoueur3.getText()+"\t"+tJoueur4.getText()+"\t"; 
					if (rFacile.isSelected())
						s += "1";
					else if (rMoyen.isSelected())
						s += "2";
						else if (rDifficile.isSelected())
							s += "3";
					pw.write(s);
						
					conf.showMessageDialog(null,"Configuration sauvegardee !","", conf.WARNING_MESSAGE);
					save.close();
				}
				catch(Exception ex)
				{
					conf.showMessageDialog(null,"Erreur dans la sauvegarde !","Alerte", conf.WARNING_MESSAGE);
				}
				
			}
	}
}