package client.control.group;

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

import javax.swing.JOptionPane;

import reseau.UnauthorizedOperationException;

import client.Application;
import client.ApplicationHelper;
import client.model.user.Droits;
import client.view.PanelGenerale;
import client.view.accueil.PanelAccueil;
import client.view.admin.PanelAdmin;
import client.view.respoGroup.PanelRespoGroupe;

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

    public EcouteurSupprimerGroupeActuel() {}

    /**<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 respo groupe
        PanelRespoGroupe prg = (PanelRespoGroupe) PanelGenerale.getInstance().getVueOnglet().getSelectedComponent();

        //On recupère les id
        String nomUser = prg.getAccueil().getPanGroup().getUserBox().getSelectedItem().toString();
        String nomGroup = prg.getAccueil().getNomGroupe();
        
        //id des utilisateurs et groupes à supprimer
        int idDeletedUser = Application.getInstance().getIdUser(nomUser);
        int idDeletedGroup = Application.getInstance().getIdGroupe(nomGroup);

        //On test si ce role possède le droit de suppression de membre
        if (ApplicationHelper.ARoleCanInGroup(Application.idSelect, idDeletedGroup, Droits.EXCLURE_MEMBRE_GROUPE)) {

            if (prg.getAccueil().getPanGroup().getUserBox().getSelectedIndex() != 0) {

                if (ApplicationHelper.CanKickUser(idDeletedUser, idDeletedGroup)) {
                    ApplicationHelper.RemoveUserFromGroup(idDeletedUser, idDeletedGroup);

                    //On MAJ les activités récentes
                    Application.getInstance().getGroupe(idDeletedGroup).addActivity(nomUser+" exclue du groupe "+nomGroup);
                    prg.getAccueil().getPanInfosRespoGroup().getListOfActivite().setListData(Application.getInstance().getGroupe(idDeletedGroup).displayActivities());
                    prg.getAccueil().getPanInfosRespoGroup().updateUI();

                    Application.getInstance().getUser(Application.idSelect).addActivity(nomUser+" exclue du groupe "+nomGroup);
                    PanelAccueil.getInstance().getListOfActivite().setListData(Application.getInstance().getUser(Application.idSelect).displayActivities());
                    PanelAccueil.getInstance().updateUI();
                    
                } else {
                    JOptionPane.showMessageDialog(PanelAdmin.getInstance(), "Erreur, Un utilisateur se retrouverait sans groupe", "Erreur - Suppression du groupe...", JOptionPane.ERROR_MESSAGE);
                }
            }
        } else {
            JOptionPane.showMessageDialog(PanelAdmin.getInstance(), "Vous n'avez pas les droits pour exclure un membre du groupe", "Erreur", JOptionPane.ERROR_MESSAGE);
        }
        
        //TODO Réseau kickUser
        try {
			throw new UnauthorizedOperationException("Méthode kick User non implémenté");
		} catch (UnauthorizedOperationException e1) {
			e1.printStackTrace();
		}
    }
}

