package client.control.membre;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Map;

import javax.swing.JOptionPane;

import client.Application;
import client.ApplicationHelper;
import client.model.group.Groupe;
import client.model.user.Droits;
import client.view.PanelGenerale;
import client.view.accueil.PanelAccueil;
import client.view.admin.PanelAdmin;
import client.view.member.PanelMembre;

/**<u><b>Explication générale de la classe :</b></u>
 * <P> Cette classe permet de gérer l'évènement lié au bouton pour quitter un groupe
 *
 * @author Dream Team - ING2
 */
public class EcouteurQuitterGroupe implements ActionListener {

    public EcouteurQuitterGroupe() {}

    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de gérer les évènements liés à la souris
     * 
     * @param e Evènement souris
     * 
     */
    public void actionPerformed(ActionEvent e) {

        //On recupère le panel du membre
        PanelMembre pm = (PanelMembre) PanelGenerale.getInstance().getVueOnglet().getSelectedComponent();

        //On récupère le nom de l'utilisateur et du groupe
        String nomUser = Application.getInstance().getUser(Application.idSelect).getLogin();
        String nomGroup = pm.getAccueil().getPanMembre().getGroupDeleteBox().getSelectedItem().toString();

        //On recupère les id
        int idUser = Application.idSelect;
        int idGroup = Application.getInstance().getIdGroupe(nomGroup);
        int idGroupInProgress = Application.getInstance().getIdGroupe(pm.getAccueil().getNomGroupe());

        //On test si ce role possède le droit de quitter le groupe
        if (ApplicationHelper.ARoleCanInGroup(idUser, idGroupInProgress, Droits.QUITTER_GROUPE)) {

            Map<Integer, Groupe> arrayGroupsOfUser = ApplicationHelper.GroupsOfUser(idUser);

            if (arrayGroupsOfUser.size() > 1 && idGroup != idGroupInProgress) {
                ApplicationHelper.RemoveUserFromGroup(idUser, idGroup);

                //On MAJ les activités récentes
                Application.getInstance().getGroupe(idGroup).addActivity(nomUser + " a quitté le groupe " + nomGroup);

                Application.getInstance().getUser(idUser).addActivity(nomUser+" a quitté le groupe "+nomGroup);
                PanelAccueil.getInstance().getListOfActivite().setListData(Application.getInstance().getUser(idUser).displayActivities());
                PanelAccueil.getInstance().updateUI();
                
                //On MAJ les box
    			pm.getAccueil().getPanMembre().remplirDeleteBoxGroupe();
    			pm.getAccueil().getPanMembre().remplirJoinBoxGroupe();
    			pm.getAccueil().getPanMembre().updateUI();

    			PanelAccueil.getInstance().remplirGroupeBox();
    			PanelAccueil.getInstance().updateUI();
    			

                //TODO p'tit coup de réseau pour mettre à jour la BDD !
                
            } else {
                JOptionPane.showMessageDialog(pm, "Vous ne pouvez pas quitter ce groupe.", "Erreur", JOptionPane.ERROR_MESSAGE);
            }

            System.out.println("" + Application.getInstance().toStringArrayLinkUserGroupRole());
        } else {
            JOptionPane.showMessageDialog(PanelAdmin.getInstance(), "Vous n'avez pas les droits pour quitter un groupe", "Erreur", JOptionPane.ERROR_MESSAGE);
        }
    }
}
