package client.view.admin.gestionUser;

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

import client.ApplicationHelper;
import client.control.admin.EcouteurExclusion;
import client.model.group.Groupe;
import client.control.Command;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import client.view.admin.gestionUser.button.ButtonAnnulerExclureUser;
import client.view.admin.gestionUser.button.ButtonValiderExclureUser;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Map;

//-----------------------------------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 concernant l'exclusion d'un utilisateur.
 *
 * @author Dream Team - ING2
 */
public class PanelExclureUser extends JPanel implements ActionListener {

    //Déclarations des variables.
    private static PanelExclureUser panSingleton = null;
    protected TitledBorder titleInfo;
    protected JLabel titreUserExclure;
    private JComboBox groupBox;
    private int userSelected;

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

    /**<u><i>Explication de la méthode :</i></u>
     * <P>Constructeur permettant de gérer l'exclusion d'un utilisateur.
     */
    public PanelExclureUser(){

        //Titre du Panel
        titleInfo = new TitledBorder("Exclure...");
        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));

        //Exclusion du groupe
        titreUserExclure = new JLabel("De quel groupe voulez-vous exclure cet utilisateur ?");
        titreUserExclure.setBounds(50, 70, 300, 15);
        add(titreUserExclure);

        groupBox = new JComboBox();
        groupBox.setBounds(50, 100, 250, 20);
        remplirGroupeBox();
        add(groupBox);

        EcouteurExclusion exclusionListener = new EcouteurExclusion();

        //Annuler
        ButtonAnnulerExclureUser baeu = new ButtonAnnulerExclureUser(this);
        baeu.setActionCommand(EcouteurExclusion.ANNULER);
        add(baeu);

        //Valider
        ButtonValiderExclureUser bveu = new ButtonValiderExclureUser(this);
        bveu.setActionCommand(EcouteurExclusion.VALIDER);
        bveu.addActionListener(exclusionListener);
        add(bveu);
    }

    /**<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 l'utilisateur sélectionné
     * 
     * @return la JComboBox des groupes
     * 
     */
    public int getUserSelected() {
        return userSelected;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur de l'utilisateur sélectionné
     * 
     * @param userSelected nouvelle valeur de l'utilisateur sélectionné
     * 
     */
    public void setUserSelected(int userSelected) {
        this.userSelected = userSelected;
    }

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

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de mettre une nouvelle référence de singleton du panel exclure utilisateur
     * 
     * @param panSingleton une nouvelle référence de singleton du panel exclure un utilisateur
     * 
     */
    public static void setPanSingleton(PanelExclureUser panSingleton) {
        PanelExclureUser.panSingleton = panSingleton;
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de mettre de remplir la JComboBox des groupes
     * 
     */
    public final void remplirGroupeBox(){
        groupBox.removeAllItems();
        groupBox.addItem("--------------------------------------------");
        Map<Integer,Groupe> arrayGroupsOfUser = ApplicationHelper.GroupsOfUser(userSelected);
        for(Iterator<Groupe> i = arrayGroupsOfUser.values().iterator();i.hasNext();){
            groupBox.addItem(i.next().getNomGroupe());
        }
    }
    
    /**<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-------------------------------------------------//