package client.control.group;

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

import javax.swing.JOptionPane;

import reseau.OptimEISTIServerProxyFacade;
import reseau.UnauthorizedOperationException;
import client.Application;
import client.ApplicationHelper;
import client.model.LienUserGroupRole;
import client.model.group.Groupe;
import client.model.user.Droits;
import client.model.user.Role;
import client.model.user.Utilisateur;
import client.view.PanelGenerale;
import client.view.accueil.PanelAccueil;
import client.view.admin.PanelAdmin;
import client.view.admin.gestionGroup.PanelCreerGroupe;
import client.view.admin.gestionGroup.PanelGestionGroupe;
import client.view.admin.gestionUser.PanelGestionUser;
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 des membres en attente
 *
 * @author Dream Team - ING2
 */
public class EcouteurMembreAttenteRespo implements ActionListener {

	//Variables permettant de définir les ActionCommand
    public static final String ACCEPTER = "ACCEPTER";
    public static final String REFUSER = "REFUSER";

    public EcouteurMembreAttenteRespo() {}

    /**<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 récupère les noms du groupe et de l'utilisateur
        String nomGroup = prg.getAccueil().getNomGroupe();
        String nomUser = prg.getAccueil().getPanGroup().getUserPendingBox().getSelectedItem().toString();
        
        //id du groupe en question
        int idGroup = Application.getInstance().getIdGroupe(nomGroup);

        if (e.getActionCommand().equals(ACCEPTER)) {

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

                if (ApplicationHelper.ARoleCanInGroup(Application.idSelect, idGroup, Droits.ACCEPTER_MEMBRE_GROUPE)) {
	                
                	//try{
                		
                		//TODO Membre en attente : cas particulier. Il nous faudrait une fonction getUser(nomUser) qui renvoit un user
	                	
	                	//Id role
	                    int idRole = Role.IDMEMBRE;
	
	                    //On recupère le réseau
	                    OptimEISTIServerProxyFacade dao = OptimEISTIServerProxyFacade.getInstance();
	                    
	                    //On recupère l'user en BDD et on l'ajoute dans le cache
	                    //Utilisateur user = dao.readUser(Application.idSelect, idGroup, idUser);
	                    
	                    //On ajoute dans l'arrayLink
	                    /*for (Iterator<Groupe> i = user.getVectGroupe().iterator(); i.hasNext();) {
	                        Application.getInstance().getArrayLinkOfUserGroupRole().add(new LienUserGroupRole(u.getIdPersonne(), i.next().getIdGroupe(), idRole));
	                    }
	
	                    Application.getInstance().removeUserPending(idUser);*/
	
	                    //On MAJ les activités récentes du groupe et du user
	                    Application.getInstance().getGroupe(nomGroup).addActivity("Acceptation de " + nomUser);
	                    prg.getAccueil().getPanInfosRespoGroup().getListOfActivite().setListData(Application.getInstance().getGroupe(nomGroup).displayActivities());
	                    prg.getAccueil().getPanInfosRespoGroup().updateUI();
	
	                    Application.getInstance().getUser(Application.idSelect).addActivity("Acceptation de " + nomUser);
	                    PanelAccueil.getInstance().getListOfActivite().setListData(Application.getInstance().getUser(Application.idSelect).displayActivities());
	                    PanelAccueil.getInstance().updateUI();
	
	                    //On MAJ la box
	                    prg.getAccueil().getPanGroup().remplirUserPendingBox();
	
	                    if(Application.idSelect == Role.IDADMINISTRATEUR){
	                        //MAJ des composants Box Gestion d'User
	                        int sizeOld = PanelGestionUser.getInstance().getUserBox().getItemCount();
	                        PanelGestionUser.getInstance().remplirUserBox();
	                        PanelGestionUser.getInstance().deleteItemOfUserBox(sizeOld);
	                        PanelGestionUser.getInstance().updateUI();
	
	                        //On MAJ les membres en attentes
	                        PanelGestionGroupe.getInstance().updateUI();
	                        
	                        //On MAJ les membres dans le créer groupe
	                        PanelCreerGroupe.getInstance().remplirUser();
	                        PanelCreerGroupe.getInstance().updateUI();
	                    }    
	
	                /*} catch (UnauthorizedOperationException ex) {
	                    JOptionPane.showMessageDialog(null,
	                            ex.getLocalizedMessage(),
	                            "Impossible d'accepter ce membre : interdit pour vous !",
	                            JOptionPane.ERROR_MESSAGE);
	                }*/
                }else{
                    JOptionPane.showMessageDialog(PanelAdmin.getInstance(), "Vous n'avez pas les droits pour accepter un membre", "Erreur", JOptionPane.ERROR_MESSAGE);
                }
            }

        } else if (e.getActionCommand().equals(REFUSER)) {
            if (ApplicationHelper.ARoleCanInGroup(Application.idSelect, idGroup, Droits.REFUSER_MEMBRE_GROUPE)) {
            	
            	//TODO cas de refus !
                //Application.getInstance().removeUserPending(user.getIdPersonne());

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

                Application.getInstance().getUser(Application.idSelect).addActivity("Refus de " + nomUser);
                PanelAccueil.getInstance().getListOfActivite().setListData(Application.getInstance().getGroupe(nomGroup).displayActivities());
                PanelAccueil.getInstance().updateUI();

                //On MAJ la box
                prg.getAccueil().getPanGroup().remplirUserPendingBox();
            }else{
                JOptionPane.showMessageDialog(PanelAdmin.getInstance(), "Vous n'avez pas les droits pour refuser un membre", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
}
