package client.view.admin.gestionUser;

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

import client.Application;
import client.control.admin.EcouteurAssignerMembre;
import client.control.admin.EcouteurBoxNom;
import client.control.admin.EcouteurExclureMembre;
import client.control.membre.EcouteurMembre;
import client.control.admin.EcouteurSupprimerMembre;
import client.control.Command;
import client.model.user.Role;
import client.model.user.Utilisateur;
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.ButtonAssignerUser;
import client.view.admin.gestionUser.button.ButtonExclureUser;
import client.view.admin.gestionUser.button.ButtonModifierUser;
import client.view.admin.gestionUser.button.ButtonSupprimerUser;
import java.awt.event.ActionListener;

//-----------------------------------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 un utilisateur.
 *
 * @author Dream Team - ING2
 */
public class PanelGestionUser extends JPanel implements ActionListener {

    //Déclarations des variables.
    private static PanelGestionUser panSingleton = null;
    private TitledBorder titleInfo;
    private JLabel titreActionUser;
    private JComboBox userBox;
    private ButtonExclureUser be;
    private ButtonSupprimerUser bs;
    private ButtonModifierUser bm;
    private ButtonAssignerUser ba;

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


    /**<u><i>Explication de la méthode :</i></u>
     * <P>Constructeur permettant de gérer un utilisateur.
     */
    private PanelGestionUser() {
        
        //Titre du Panel
        titleInfo = new TitledBorder("Gestion Utilisateur");
        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));

        //Sélection d'un membre
        titreActionUser = new JLabel("Sélectionnez un membre :");
        titreActionUser.setBounds(30, 20, 150, 15);
        add(titreActionUser);

        userBox = new JComboBox();
        remplirUserBox();
        userBox.setBounds(30, 50, 250, 20);
        userBox.addItemListener(new EcouteurBoxNom());
        add(userBox);

        //Bouton Assigner
        ba = new ButtonAssignerUser(this);
        ba.addActionListener(new EcouteurAssignerMembre());
        add(ba);

        //Bouton Modifier
        bm = new ButtonModifierUser(this);
        bm.addActionListener(new EcouteurMembre());
        add(bm);

        //Supprimer
        bs = new ButtonSupprimerUser(this);
        bs.addActionListener(new EcouteurSupprimerMembre());
        add(bs);

        //Exclure
        be = new  ButtonExclureUser(this);
        be.addActionListener(new EcouteurExclureMembre());
        add(be);
    }

    /**<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 getUserBox() {
        return userBox;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le bouton permettant d'assigner un utilisateur
     * 
     * @return le bouton permettant d'assigner un utilisateur
     * 
     */
    public ButtonAssignerUser getBa() {
        return ba;
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le bouton permettant d'assigner un utilisateur
     * 
     * @return le bouton permettant d'assigner un utilisateur
     * 
     */
    public ButtonExclureUser getBe() {
        return be;
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le bouton permettant de modifier un utilisateur
     * 
     * @return le bouton permettant de modifier un utilisateur
     * 
     */
    public ButtonModifierUser getBm() {
        return bm;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le bouton permettant de supprimer un utilisateur
     * 
     * @return le bouton permettant de supprimer un utilisateur
     * 
     */
    public ButtonSupprimerUser getBs() {
        return bs;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le singleton du panel gestion utilisateur
     * 
     * @return le singleton du panel gestion un utilisateur
     * 
     */
    public static PanelGestionUser 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 gestion utilisateur
     * 
     * @param panSingleton une nouvelle référence de singleton du panel gestion un utilisateur
     * 
     */
    public static void setPanSingleton(PanelGestionUser panSingleton) {
        PanelGestionUser.panSingleton = panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de mettre de remplir la JComboBox des utilisateurs
     * 
     */
    public final void remplirUserBox(){
        userBox.addItem("-------------------------------------------------------");

        for(Utilisateur user : Application.getInstance().getUsers()){
        	System.out.println("idUser : "+user.getIdPersonne()+" - appli id : "+Application.idSelect);
            if(user.getIdPersonne() != Application.idSelect){
                userBox.addItem(user.getLogin());
            }
        }
        
        userBox.addItem("-------------------------------------------------------");
        userBox.addItem("Créer un membre");
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de supprimer les items de la JComboBox
     * 
     * @param size nombre d'éléments à supprimer
     */
    public final void deleteItemOfUserBox(int size){
        for(int i=size-1; i>=0; i--){
            userBox.removeItemAt(i);
            
        }
    }

    /**<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-------------------------------------------------//
