#pragma once
#ifndef LIST
#define LIST
#include <list>
#endif
#include "AbstractUIObserver.h"
using namespace std;

class AbstractAction;

class SimulationControllerFacade
{
public:
	virtual void executeAction(AbstractAction* action) = 0;
	void attachUIObserver(AbstractUIObserver* observer);
	void detachUIObserver(AbstractUIObserver* observer);
	void notifyStep();
	void notifySimulation();
	void notifyMultipleSimulations();
	virtual AbstractSimulationResultDTO* getSimulationResult() = 0;
	SimulationControllerFacade(){
		theObservers = new list<AbstractUIObserver*>();
	}
private:
	list<AbstractUIObserver*>* theObservers;
};