package client.view.admin.gestionGroup;

//------------------------------------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.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.admin.EcouteurCreerGroupe;
import client.model.user.Utilisateur;
import client.view.admin.gestionGroup.button.ButtonAnnulerCreerGroup;
import client.view.admin.gestionGroup.button.ButtonValiderCreerGroup;

//-----------------------------------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 gérer le panel qui créer un groupe.
 *
 * @author Dream Team - ING2
 */
public class PanelCreerGroupe extends JPanel implements ActionListener {

    //Déclaration des variables.
    private static PanelCreerGroupe panSingleton = null;
    private TitledBorder titleInfo;
    private JLabel titreGroupe, titreRespoGroupe;
    private JTextField nomGroupe;
    private JComboBox nomBox;

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de créer un singleton du panel creer un groupe
     * 
     * @return une unique instance du panel creer un groupe
     * 
     */
    public static PanelCreerGroupe getInstance(){
        if(panSingleton == null){
            panSingleton = new PanelCreerGroupe();
        }
        return panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P>Constructeur permettant de gérer le panel qui créer un groupe.
     * @param admin Objet de type PanelAdmin permettant de récupérer le panel et d'effectuer l'intéraction avec les listeners
     */
    private PanelCreerGroupe(){
    	
        //Titre du Panel
        titleInfo = new TitledBorder("Nouveau groupe...");
        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));

        //Nom du groupe
        titreGroupe = new JLabel("Nom du groupe :");
        titreGroupe.setBounds(50, 50, 135, 15);
        add(titreGroupe);

        nomGroupe = new JTextField(25);
        nomGroupe.setBounds(50, 70, 250, 20);
        add(nomGroupe);

        //Responsable du groupe
        titreRespoGroupe = new JLabel("Responsable du groupe :");
        titreRespoGroupe.setBounds(50, 130, 150, 20);
        add(titreRespoGroupe);

        nomBox = new JComboBox();
        remplirUser();
        nomBox.setBounds(50, 160, 250, 20);
        nomBox.setBackground(new Color(234, 232, 233));
        add(nomBox);

        //Annuler
        EcouteurCreerGroupe creerGroupeListener = new EcouteurCreerGroupe();

        ButtonAnnulerCreerGroup bacg = new ButtonAnnulerCreerGroup(this);
        bacg.setActionCommand(EcouteurCreerGroupe.ANNULER);
        add(bacg);

        //Valider
        ButtonValiderCreerGroup bvcg = new ButtonValiderCreerGroup(this);
        bvcg.setActionCommand(EcouteurCreerGroupe.VALIDER);
        bvcg.addActionListener(creerGroupeListener);
        add(bvcg);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la JComboBox des utilisateurs
     * 
     * @return la JComboBox des utilisateurs
     * 
     */
    public JComboBox getNomBox() {
        return nomBox;
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField du nom de groupe
     * 
     * @return le JTextField du nom de groupe
     * 
     */
    public JTextField getNomGroupe() {
        return nomGroupe;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de mettre une nouvelle référence du nom de groupe
     * 
     * @param nomGroupe nouvelle référence du nom de groupe
     * 
     */
    public void setNomGroupe(JTextField nomGroupe) {
        this.nomGroupe = nomGroupe;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le singleton du panel créer un groupe
     * 
     * @return le singleton du panel créer un groupe
     * 
     */
    public static PanelCreerGroupe getPanSingleton() {
        return panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de mettre une nouvelle référence du singleton du panel créer un groupe
     * 
     * @param panSingleton nouvelle référence du singleton du panel créer un groupe
     * 
     */
    public static void setPanSingleton(PanelCreerGroupe panSingleton) {
        PanelCreerGroupe.panSingleton = panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de remplir la JComboBox des utilisateurs
     * 
     */
    public final void remplirUser(){
        nomBox.removeAllItems();
        nomBox.addItem("-------------------------------------------------------");
        for(Utilisateur user : Application.getInstance().getUsers()){
        	if(user.getRolePersonne() == null)
        		nomBox.addItem(user.getLogin());
        }
    }

    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'effectuer la fonction "execute" lorsqu'il y a une action
     * 
     * @param e Evènement souris
     * 
     */
    public void actionPerformed(ActionEvent e) {
        Command c = (Command)e.getSource();
        c.execute();
    }
}

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