package client.control.benchmark;

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

import client.model.problem.Methode;
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 gérer l'évènement lié au bouton pour lancer le benchmark
 *
 * @author Dream Team - ING2
 */
public class EcouteurLancerBenchmarks implements ActionListener {

    public EcouteurLancerBenchmarks(){}

    /**<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) {
    	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 affiche le panel pour les responsables de groupe
		if (prg != null) {
			prg.getBenchmark().getPanCondiInitial().setVisible(true);
			prg.getBenchmark().getPanBenchmarkRes().setVisible(false);
			
			prg.getBenchmark().getPanCondiInitial().getInitialVectorLabel().setVisible(true);
			prg.getBenchmark().getPanCondiInitial().getInitialVector().setVisible(true);
			prg.getBenchmark().getPanCondiInitial().getInitialVector().setText("");

			Object[] tabMethode = prg.getBenchmark().getPanBenchmarkPb().getListOfResultat().getSelectedValues();
			
			for(int i=0;i<tabMethode.length;i++){
				if(tabMethode[i].toString().contains(Methode.METHODE_PAS_FIXE)){
					prg.getBenchmark().getPanCondiInitial().getEpsilonLabel().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getEpsilon().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getEpsilon().setText("");
					
					prg.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getIteration().setText("");
										
					prg.getBenchmark().getPanCondiInitial().getStep().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getStepLabel().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getStep().setText("");
				}
				
				if(tabMethode[i].toString().contains(Methode.METHODE_PAS_OPTIMAL)){
					prg.getBenchmark().getPanCondiInitial().getEpsilonLabel().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getEpsilon().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getEpsilon().setText("");
					
					prg.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getIteration().setText("");
					prg.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
				}
				
				if(tabMethode[i].toString().contains(Methode.METHODE_NEWTON)){
					prg.getBenchmark().getPanCondiInitial().getEpsilonLabel().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getEpsilon().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getEpsilon().setText("");
					
					prg.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getIteration().setText("");
					prg.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					
					prg.getBenchmark().getPanCondiInitial().getStep().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getStep().setText("");
					prg.getBenchmark().getPanCondiInitial().getStepLabel().setVisible(true);
				}
							
				if(tabMethode[i].toString().contains(Methode.METHODE_RECUIT_SIMULE)){
					prg.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getIteration().setText("");
					prg.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					
					prg.getBenchmark().getPanCondiInitial().getTemperature().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getTemperature().setText("");
					prg.getBenchmark().getPanCondiInitial().getTemperatureLabel().setVisible(true);
					
					prg.getBenchmark().getPanCondiInitial().getExplorationStep().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getExplorationStep().setText("");
					prg.getBenchmark().getPanCondiInitial().getExplorationStepLabel().setVisible(true);
					
				}
				
				if(tabMethode[i].toString().contains(Methode.METHODE_TABOU)){
					prg.getBenchmark().getPanCondiInitial().getEpsilonLabel().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getEpsilon().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getEpsilon().setText("");
					
					prg.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getIteration().setText("");
					prg.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					
					prg.getBenchmark().getPanCondiInitial().getStep().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getStep().setText("");
					prg.getBenchmark().getPanCondiInitial().getStepLabel().setVisible(true);
				}
				
				if(tabMethode[i].toString().contains(Methode.METHODE_ALGO_EVOLUTIONNAIRE)){
					prg.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getIteration().setText("");
					prg.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					
					prg.getBenchmark().getPanCondiInitial().getSizeOfInitialPop().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getSizeOfInitialPop().setText("");
					prg.getBenchmark().getPanCondiInitial().getSizeOfInitialPopLabel().setVisible(true);
					
					prg.getBenchmark().getPanCondiInitial().getCrossProba().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getCrossProba().setText("");
					prg.getBenchmark().getPanCondiInitial().getCrossProbaLabel().setVisible(true);
					
					prg.getBenchmark().getPanCondiInitial().getMutationProba().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getMutationProba().setText("");
					prg.getBenchmark().getPanCondiInitial().getMutationProbaLabel().setVisible(true);
					
					prg.getBenchmark().getPanCondiInitial().getInf().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getInf().setText("");
					prg.getBenchmark().getPanCondiInitial().getInfLabel().setVisible(true);
					
					prg.getBenchmark().getPanCondiInitial().getSup().setVisible(true);
					prg.getBenchmark().getPanCondiInitial().getSup().setText("");
					prg.getBenchmark().getPanCondiInitial().getSupLabel().setVisible(true);
				}
			}
			
		//On affiche le panel pour les membres
		}else if(pm != null){
			pm.getBenchmark().getPanCondiInitial().setVisible(true);
			pm.getBenchmark().getPanBenchmarkRes().setVisible(false);
			
			pm.getBenchmark().getPanCondiInitial().getInitialVectorLabel().setVisible(true);
			pm.getBenchmark().getPanCondiInitial().getInitialVector().setVisible(true);
			pm.getBenchmark().getPanCondiInitial().getInitialVector().setText("");
			
			Object[] tabMethode = pm.getBenchmark().getPanBenchmarkPb().getListOfResultat().getSelectedValues();
			System.out.println("tabMethode.length : "+tabMethode.length);
			for(int i=0;i<tabMethode.length;i++){
				if(tabMethode[i].toString().contains(Methode.METHODE_PAS_FIXE)){
					pm.getBenchmark().getPanCondiInitial().getEpsilonLabel().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getEpsilon().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getEpsilon().setText("");
					
					pm.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getIteration().setText("");
					pm.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getStep().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getStep().setText("");
					pm.getBenchmark().getPanCondiInitial().getStepLabel().setVisible(true);
				}
				
				if(tabMethode[i].toString().contains(Methode.METHODE_PAS_OPTIMAL)){
					pm.getBenchmark().getPanCondiInitial().getEpsilonLabel().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getEpsilon().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getEpsilon().setText("");
					
					pm.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getIteration().setText("");
					pm.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
				}
				
				if(tabMethode[i].toString().contains(Methode.METHODE_NEWTON)){
					pm.getBenchmark().getPanCondiInitial().getEpsilonLabel().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getEpsilon().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getEpsilon().setText("");
					
					pm.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getIteration().setText("");
					pm.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getStep().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getStep().setText("");
					pm.getBenchmark().getPanCondiInitial().getStepLabel().setVisible(true);
				}
							
				if(tabMethode[i].toString().contains(Methode.METHODE_RECUIT_SIMULE)){
					pm.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getIteration().setText("");
					pm.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getTemperature().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getTemperature().setText("");
					pm.getBenchmark().getPanCondiInitial().getTemperatureLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getExplorationStep().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getExplorationStep().setText("");
					pm.getBenchmark().getPanCondiInitial().getExplorationStepLabel().setVisible(true);
					
				}
				
				if(tabMethode[i].toString().contains(Methode.METHODE_TABOU)){
					pm.getBenchmark().getPanCondiInitial().getEpsilonLabel().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getEpsilon().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getEpsilon().setText("");
					
					pm.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getIteration().setText("");
					pm.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getStep().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getStep().setText("");
					pm.getBenchmark().getPanCondiInitial().getStepLabel().setVisible(true);
				}
				
				if(tabMethode[i].toString().contains(Methode.METHODE_ALGO_EVOLUTIONNAIRE)){
					pm.getBenchmark().getPanCondiInitial().getIteration().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getIteration().setText("");
					pm.getBenchmark().getPanCondiInitial().getIterationLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getSizeOfInitialPop().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getSizeOfInitialPop().setText("");
					pm.getBenchmark().getPanCondiInitial().getSizeOfInitialPopLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getCrossProba().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getCrossProba().setText("");
					pm.getBenchmark().getPanCondiInitial().getCrossProbaLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getMutationProba().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getMutationProba().setText("");
					pm.getBenchmark().getPanCondiInitial().getMutationProbaLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getInf().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getInf().setText("");
					pm.getBenchmark().getPanCondiInitial().getInfLabel().setVisible(true);
					
					pm.getBenchmark().getPanCondiInitial().getSup().setVisible(true);
					pm.getBenchmark().getPanCondiInitial().getSup().setText("");
					pm.getBenchmark().getPanCondiInitial().getSupLabel().setVisible(true);
				}
			}
		}
    }

}
