package client.control.probleme;

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

import javax.swing.JOptionPane;

import client.Application;
import client.ApplicationHelper;
import client.model.problem.Contrainte;
import client.model.problem.Probleme;
import client.model.user.Droits;
import client.view.admin.PanelAdmin;
import client.view.member.PanelMembre;
import client.view.respoGroup.PanelRespoGroupe;

/** <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 Consulter
 *
 * @author Dream Team - ING2
 */
public class ControleurBoutonConsulter implements ActionListener {

    /**<u><i>Explication générale du constructeur :</i></u>
     * <P> Constructeur de la classe permettant de créer le Controleur du bouton Consulter et de récuperer le Panel Problème
     *
     */
    public ControleurBoutonConsulter() {}

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode est l'ecouteur du bouton Consulter. Elle permet d'afficher le Panel : panConsultPb
     * (Panel Consulter PanelProbleme)
     *
     */
    public void actionPerformed(ActionEvent e) {

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

        PanelRespoGroupe prg = null;
        PanelMembre pm = null;

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

        //On recupère l'idGroup en fonction du user
        int idGroup;

        if(prg !=null)
            idGroup = Application.getInstance().getIdGroupe(prg.getAccueil().getNomGroupe());
        else
            idGroup = Application.getInstance().getIdGroupe(pm.getAccueil().getNomGroupe());

        //On test si ce role possède le droit de consulter un problème
        if (ApplicationHelper.ARoleCanInGroup(Application.idSelect, idGroup, Droits.CONSULTER_PROBLEME)) {
        	        	
            if(prg != null){
            	String nomProbleme = prg.getProbleme().getPanChoixPb().getProblemeBox().getSelectedItem().toString();
            	Probleme problemToConsult = Application.getInstance().getProbleme(nomProbleme);
            	
                prg.getProbleme().getPanConsultPb().RemoveAllElementsFromTable(prg.getProbleme().getPanConsultPb().getValuesTableDefaultModelContrainte());
                prg.getProbleme().getPanConsultPb().getTitreProbleme().setText("");
                prg.getProbleme().getPanConsultPb().getLibelleFonction().setText("");
                
                prg.getProbleme().getPanConsultPb().getTitreProbleme().setText((String) "<html><u>" + problemToConsult.getNomProbleme() + "</u></html>");
                prg.getProbleme().getPanConsultPb().getLibelleFonction().setText(problemToConsult.getLibelleFonction());
                
                if(problemToConsult.getDeriveeOrdreUn().size()>0){
                	System.out.println("derive : parametre 2 : "+problemToConsult.getDerive(0).getParameters(2).getContent());
                	System.out.println("derive : parametre 1 : "+problemToConsult.getDerive(0).getParameters(1).getContent());
                	System.out.println("derive : parametre 0 : "+problemToConsult.getDerive(0).getParameters(0).getContent());
	                Object[] infosDerive = {"Derive : " ,problemToConsult.getDerive(0).getParameters(2).getContent(), ""+problemToConsult.getDerive(0).getParameters(1).getContent(), ""+problemToConsult.getDerive(0).getParameters(0).getContent()};
	                prg.getProbleme().getPanConsultPb().getValuesTableDefaultModelContrainte().addRow(infosDerive);
                }
                for(Contrainte contrainte : problemToConsult.getVectContraintes()){
	                Object[] infosContrainte = {"Contrainte : " ,contrainte.getParameters(2).getContent(), ""+contrainte.getParameters(1).getContent(), ""+contrainte.getParameters(0).getContent()};
	                prg.getProbleme().getPanConsultPb().getValuesTableDefaultModelContrainte().addRow(infosContrainte);
                }
                
                prg.getProbleme().getPanCreerPb().setVisible(false);
                prg.getProbleme().getPanModifPb().setVisible(false);
                prg.getProbleme().getPanExecPb().setVisible(false);
                prg.getProbleme().getPanConsultPb().setVisible(true);

            }else if(pm != null){
            	String nomProbleme = pm.getProbleme().getPanChoixPb().getProblemeBox().getSelectedItem().toString();
            	Probleme problemToConsult = Application.getInstance().getProbleme(nomProbleme);
            	
                //pm.getProbleme().getPanModifPb().getvaluesListDefaultModelFonction().removeAllElements();
                pm.getProbleme().getPanConsultPb().RemoveAllElementsFromTable(pm.getProbleme().getPanConsultPb().getValuesTableDefaultModelContrainte());

                pm.getProbleme().getPanConsultPb().getTitreProbleme().setText("");
                pm.getProbleme().getPanConsultPb().getLibelleFonction().setText("");
                
                pm.getProbleme().getPanConsultPb().getTitreProbleme().setText((String) "<html><u>" + problemToConsult.getNomProbleme() + "</u></html>");
                pm.getProbleme().getPanConsultPb().getLibelleFonction().setText(problemToConsult.getLibelleFonction());
                
                if(problemToConsult.getDeriveeOrdreUn().size()>0){
	                Object[] infosDerive = {"Derive : " ,problemToConsult.getDerive(0).getParameters(2).getContent(), ""+problemToConsult.getDerive(0).getParameters(1).getContent(), ""+problemToConsult.getDerive(0).getParameters(0).getContent()};
	                pm.getProbleme().getPanConsultPb().getValuesTableDefaultModelContrainte().addRow(infosDerive);
                }
                for(Contrainte contrainte : problemToConsult.getVectContraintes()){
	                Object[] infosContrainte = {"Contrainte : ",contrainte.getParameters(2).getContent(), ""+contrainte.getParameters(0).getContent()};
	                pm.getProbleme().getPanConsultPb().getValuesTableDefaultModelContrainte().addRow(infosContrainte);
                }
                
                pm.getProbleme().getPanConsultPb().getTitreProbleme().setText((String) "<html><u>" + pm.getProbleme().getPanChoixPb().getProblemeBox().getSelectedItem() + "</u></html>");
                pm.getProbleme().getPanCreerPb().setVisible(false);
                pm.getProbleme().getPanModifPb().setVisible(false);
                pm.getProbleme().getPanExecPb().setVisible(false);
                pm.getProbleme().getPanConsultPb().setVisible(true);
            }
            
        }else{
            JOptionPane.showMessageDialog(PanelAdmin.getInstance(), "Vous n'avez pas les droits pour consulter un problème", "Erreur", JOptionPane.ERROR_MESSAGE);
        }
    }
}
