package client.control.admin;

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

import javax.swing.JOptionPane;

import reseau.DataNotFoundException;
import reseau.IDatabaseOperationsProxyFacade;
import reseau.IManagementOperationProxyFacade;
import reseau.OptimEISTIServerProxyFacade;
import reseau.UnauthorizedOperationException;
import client.Application;
import client.ApplicationHelper;
import client.model.user.Droits;
import client.model.user.Role;
import client.view.accueil.PanelAccueil;
import client.view.admin.PanelAdmin;

/**
 * <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 supprimer un groupe
 * 
 * @author Dream Team - ING2
 */
public class EcouteurSupprimerGroupe implements ActionListener {

	public EcouteurSupprimerGroupe() {}

	/**
	 * <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 récupère le rôle
		Role role = Application.getInstance().getUser(Application.idSelect)
				.getRolePersonne();
		
		// idRole du role en question
		int idRole = Application.getInstance().getIdRole(role);

		// On test si ce role possède le droit de suppression de membre
		if (ApplicationHelper.ARoleCan(idRole, Droits.SUPPRIMER_MEMBRE)) {

			if (PanelAdmin.getInstance().getPanGroup().getGroupBox()
					.getSelectedIndex() != 0
					&& PanelAdmin.getInstance().getPanGroup().getGroupBox()
							.getSelectedIndex() != ApplicationHelper
							.GroupsOfUser(Application.idSelect).size() + 1) {

				String nomGroupe = PanelAdmin.getInstance().getPanGroup()
						.getGroupBox().getSelectedItem().toString();
				int idGroup = Application.getInstance().getIdGroupe(nomGroupe);

				if (ApplicationHelper.CanRemoveGroup(idGroup)) {

					try {

						// On récupère le réseau
						IDatabaseOperationsProxyFacade dao = OptimEISTIServerProxyFacade
								.getInstance();

						// On supprime le groupe concerné dans la BDD
						dao.deleteGroup(Application.idSelect, idGroup);

						// On modifie dans le cache
						ApplicationHelper.RemoveGroupFromArrayLink(idGroup);
						Application.getInstance().removeGroup(idGroup);

						// On met a jour les groupes
						IManagementOperationProxyFacade mop = OptimEISTIServerProxyFacade
								.getInstance();
						Application.getInstance().updateArrayGroup(
								mop.getGroups());

						// On MAJ les activités récentes
						Application.getInstance().getUser(Application.idSelect)
								.addActivity(
										"Suppression du groupe " + nomGroupe);
						PanelAccueil.getInstance().getListOfActivite()
								.setListData(
										Application.getInstance().getUser(
												Application.idSelect)
												.displayActivities());
						PanelAccueil.getInstance().updateUI();
					} catch (UnauthorizedOperationException ex) {
						JOptionPane
								.showMessageDialog(
										null,
										ex.getLocalizedMessage(),
										"Impossible de supprimer un groupe : interdit pour vous !",
										JOptionPane.ERROR_MESSAGE);
					} catch (DataNotFoundException ed) {
						JOptionPane
								.showMessageDialog(
										null,
										ed.getLocalizedMessage(),
										"Impossible de supprimer un groupe : groupe non trouvé !",
										JOptionPane.ERROR_MESSAGE);
					}
				} 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 supprimer un groupe",
					"Erreur", JOptionPane.ERROR_MESSAGE);
		}
	}
}
