package client.view.connexion;

//------------------------------------Importations des différentes bibliothèques---------------------------------//

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

import client.Application;
import client.control.Command;
import client.control.connexion.EcouteurInscription;
import client.model.group.Groupe;
import client.view.connexion.button.ButtonAnnulerCreerUserConnexion;
import client.view.connexion.button.ButtonValiderCreerUserConnexion;

//-----------------------------------Fin Importations des différentes bibliothèques------------------------------//







//-------------------------------------------------Début de la classe------------------------------------------------//

/**<u><b>Explication générale de la classe :</b></u>
 * <P>Cette classe permet de créer le panel de créationd d'utilisateur.
 *
 * @author Dream Team - ING2
 */
public final class PanelConnexionCreerUser extends JPanel implements ActionListener {

    //Déclarations des variables.
    private static PanelConnexionCreerUser panSingleton = null;
    private TitledBorder titleInfo;
    private JTextField nom, prenom, adresse, ville, codePostal, telephone, email, login, password;
    private JLabel titreNom, titrePrenom, titreAdresse, titreVille, titreCP, titreTel,
            titreEmail, titreLogin, titrePassword, titreCU, titreGroupeAssigner, eisti;
    private JCheckBox check;
    private JComboBox groupBox;

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de créer une unique instance du panel de création d'utilisateur lors de la connexion
     * 
     * @return une unique instance du panel de création d'utilisateur lors de la connexion
     * 
     */
    public static PanelConnexionCreerUser getInstance(){
        if(panSingleton == null){
            panSingleton = new PanelConnexionCreerUser();
        }
        return panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P>Constructeur permettant de créer le panel créer User.
     */
    private PanelConnexionCreerUser() {

        //Titre
        titleInfo = new TitledBorder("Nouvelle Inscription...");
        titleInfo.setTitleColor(Color.BLUE);
        this.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.BLUE));
        this.setBorder(BorderFactory.createTitledBorder(titleInfo));

        this.setBackground(new Color(234, 232, 233));

        setLayout(null);

        //Nom
        titreNom = new JLabel("Nom : ");
        titreNom.setBounds(50, 30, 50, 25);
        add(titreNom);
        nom = new JTextField(25);
        nom.setBounds(130, 30, 300, 25);
        add(nom);

        //Prenom
        titrePrenom = new JLabel("Prénom : ");
        titrePrenom.setBounds(50, 70, 60, 25);
        add(titrePrenom);
        prenom = new JTextField();
        prenom.setBounds(130, 70, 300, 25);
        add(prenom);

        //Adresse
        titreAdresse = new JLabel("Adresse : ");
        titreAdresse.setBounds(50, 110, 60, 25);
        add(titreAdresse);
        adresse = new JTextField();
        adresse.setBounds(130, 110, 300, 25);
        add(adresse);

        //Ville
        titreVille = new JLabel("Ville : ");
        titreVille.setBounds(50, 150, 60, 25);
        add(titreVille);
        ville = new JTextField();
        ville.setBounds(130, 150, 300, 25);
        add(ville);

        //Code Postal
        titreCP = new JLabel("Code Postal : ");
        titreCP.setBounds(50, 190, 80, 25);
        add(titreCP);
        codePostal = new JTextField();
        codePostal.setBounds(130, 190, 300, 25);
        add(codePostal);

        //Téléphone
        titreTel = new JLabel("Téléphone : ");
        titreTel.setBounds(50, 230, 80, 25);
        add(titreTel);
        telephone = new JTextField();
        telephone.setBounds(130, 230, 300, 25);
        add(telephone);

        //Email
        titreEmail = new JLabel("E mail : ");
        titreEmail.setBounds(50, 270, 60, 25);
        add(titreEmail);
        email = new JTextField();
        email.setBounds(130, 270, 300, 25);
        add(email);

        //Login
        titreLogin = new JLabel("Login : ");
        titreLogin.setBounds(50, 310, 60, 25);
        add(titreLogin);
        login = new JTextField();
        login.setBounds(130, 310, 300, 25);
        add(login);

        //Password
        titrePassword = new JLabel("Password : ");
        titrePassword.setBounds(50, 350, 80, 25);
        add(titrePassword);
        password = new JTextField();
        password.setBounds(130, 350, 300, 25);
        add(password);

        //Groupe à assigner
        titreGroupeAssigner = new JLabel("Groupe : ");
        titreGroupeAssigner.setBounds(50, 380, 80, 25);
        add(titreGroupeAssigner);
        groupBox = new JComboBox();
        remplirGroupeBox();
        groupBox.setBounds(130, 380, 300, 25);
        add(groupBox);

        //Conditions d'utilisations
        titreCU = new JLabel("Conditions d'utilisation (non dispo)");
        titreCU.setBounds(130, 410, 150, 25);
        add(titreCU);

        //Accepte
        check = new JCheckBox("J'accepte");
        check.setBounds(290, 410, 100, 25);
        add(check);

        //Valider
        ButtonValiderCreerUserConnexion bvcu = new ButtonValiderCreerUserConnexion(this);
        add(bvcu);

        //Annuler
        ButtonAnnulerCreerUserConnexion bacu = new ButtonAnnulerCreerUserConnexion(this);
        add(bacu);

        //Listener
        EcouteurInscription inscriptionListener = new EcouteurInscription();

        bvcu.setActionCommand(EcouteurInscription.VALIDER);
        bvcu.addActionListener(inscriptionListener);

        bacu.setActionCommand(EcouteurInscription.ANNULER);
        bacu.addActionListener(inscriptionListener);

        //Image EISTI
        eisti = new JLabel("");
        ImageIcon iconEisti = new ImageIcon(this.getClass().getResource("/client/view/connexion/EISTI.gif"));
        eisti.setIcon(iconEisti);
        eisti.setBounds(500, -30, 400, 500);
        add(eisti);
    }

    public final void remplirGroupeBox(){
        groupBox.removeAllItems();
        groupBox.addItem("-------------------------------------------------------");
        for(Groupe p : Application.getInstance().getGroupes()){
            groupBox.addItem(p.getNomGroupe());
        }
    }
    
    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer l'adresse
	 * 
	 * @return l'adresse
	 * 
	 */
    public JTextField getAdresse() {
        return adresse;
    }
    
    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer le code postal
	 * 
	 * @return le code postal
	 * 
	 */
    public JTextField getCodePostal() {
        return codePostal;
    }

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer l'email
	 * 
	 * @return l'email
	 * 
	 */
    public JTextField getEmail() {
        return email;
    }

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer la JComboBox des groupes
	 * 
	 * @return la JComboBox des groupes
	 * 
	 */
    public JComboBox getGroupBox() {
        return groupBox;
    }
    
    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer le login
	 * 
	 * @return le login
	 * 
	 */
    public JTextField getLogin() {
        return login;
    }
    
    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer le nom
	 * 
	 * @return le nom
	 * 
	 */
    public JTextField getNom() {
        return nom;
    }

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer le password
	 * 
	 * @return le password
	 * 
	 */
    public JTextField getPassword() {
        return password;
    }

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer le prénom
	 * 
	 * @return le prénom
	 * 
	 */
    public JTextField getPrenom() {
        return prenom;
    }

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer le téléphone
	 * 
	 * @return le téléphone
	 * 
	 */
    public JTextField getTelephone() {
        return telephone;
    }

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer la ville
	 * 
	 * @return la ville
	 * 
	 */
    public JTextField getVille() {
        return ville;
    }
    
    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de gérer les évènements liés à la souris
	 * 
	 * @param e Evènements de la souris
	 * 
	 */
    public void actionPerformed(ActionEvent e) {
        Command c = (Command)e.getSource();
        c.execute();
    }

}

//-------------------------------------------------Fin de la classe-------------------------------------------------//