package client.control.probleme;

import client.Application;
import client.ApplicationHelper;
import client.view.PanelGenerale;
import client.view.admin.PanelAdmin;
import client.view.member.PanelMembre;
import client.view.onglet.OngletSpecial;
import client.view.respoGroup.PanelRespoGroupe;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;

/**
 * <u><b>Explication générale de la classe :</b></u>
 * <P>
 * Cette classe permet de créer le controleur instancié dans PanelProbleme du
 * bouton Annuler
 * 
 * @author Dream Team - ING2
 */
public class ControleurBoutonAnnulerExecute implements ActionListener {

	PanelRespoGroupe prg = null;
	PanelMembre pm = null;
	/**
	 * <u><i>Explication générale du constructeur :</i></u>
	 * <P>
	 * Constructeur de la classe permettant de créer le Controleur du bouton
	 * Annuler et de récuperer le Panel Problème
	 * 
	 */
	public ControleurBoutonAnnulerExecute() {}

	/**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode est l'ecouteur du bouton Annuler. Si l'utilisateur accepte
	 * d'annuler, les differents panels disparaissent. Il ne peut plus que creer
	 * ou selectionner un problème
	 * <P>
	 * 
	 */
	public void actionPerformed(ActionEvent e) {

		Component c = (Component) e.getSource();

		while (c != null) {
			if (c instanceof PanelRespoGroupe) {
				prg = (PanelRespoGroupe) c;
			} else if (c instanceof PanelMembre) {
				pm = (PanelMembre) c;
			}
			c = c.getParent();
		}

		int option = JOptionPane.showConfirmDialog(null,
				"Voulez-vous arrêter ?", "Arrêt", JOptionPane.YES_NO_OPTION,
				JOptionPane.QUESTION_MESSAGE);

		if (option != JOptionPane.NO_OPTION
				&& option != JOptionPane.CLOSED_OPTION) {

			if (prg != null) {
				prg.getProbleme().getPanExecPb().CacherLabel();
				DebloquerPanelRespo();
			} else if (pm != null) {
				pm.getProbleme().getPanExecPb().CacherLabel();
				DebloquerPanelMembre();
			}
		}
	}
	
	/** <u><i>Explication générale de la méthode :</i></u> 
	 * <P> Cette méthode permet de débloquer les panels des responsable de groupe
	 * 
	 */
	public void DebloquerPanelRespo() {

        //On recupère l'onglet en cours
        OngletSpecial os = ((OngletSpecial) PanelGenerale.getInstance().getVueOnglet().getTabComponentAt(PanelGenerale.getInstance().getVueOnglet().getSelectedIndex()));

      //On récupère les id
        int idUser = Application.idSelect;
        int idGroup = Application.getInstance().getIdGroupe(os.getTitle());
        int idRole = ApplicationHelper.IdRoleOfUserInGroup(idUser, idGroup);

        PanelGenerale.getInstance().getVueOnglet().setEnabled(true);
        if (ApplicationHelper.UserHaveGoodRole(idUser, idGroup, idRole)) {
            prg.getJtbOperation().setEnabled(true);
        } else if (ApplicationHelper.UserHaveGoodRole(Application.idSelect, idGroup, idRole)) {
            PanelAdmin.getInstance().setEnabled(true);
        }

        for (int i = 0; i < prg.getProbleme().getPanChoixPb().getComponentCount(); i++) {
            prg.getProbleme().getPanChoixPb().getComponent(i).setEnabled(true);
        }
    }
	
	/** <u><i>Explication générale de la méthode :</i></u> 
	 * <P> Cette méthode permet de débloquer les panels des membres
	 * 
	 */
	public void DebloquerPanelMembre() {

        //On recupère l'onglet en cours
        OngletSpecial os = ((OngletSpecial) PanelGenerale.getInstance().getVueOnglet().getTabComponentAt(PanelGenerale.getInstance().getVueOnglet().getSelectedIndex()));

        //On récupère les id
        int idUser = Application.idSelect;
        int idGroup = Application.getInstance().getIdGroupe(os.getTitle());
        int idRole = ApplicationHelper.IdRoleOfUserInGroup(idUser, idGroup);

        PanelGenerale.getInstance().getVueOnglet().setEnabled(true);
        if (ApplicationHelper.UserHaveGoodRole(idUser, idGroup, idRole)) {
            pm.getJtbOperation().setEnabled(true);
        }

        for (int i = 0; i < pm.getProbleme().getPanChoixPb().getComponentCount(); i++) {
            pm.getProbleme().getPanChoixPb().getComponent(i).setEnabled(true);
        }
    }
}
