// __author__ = Juan Carlos De Abreu (jcabreur@gmail.com)

/**
 * TODO(jcabreur): write a general comment here
 */

#ifndef UTIL_TIME_H__
#define UTIL_TIME_H__

#include "../../Includes/Basic.h"
#include "../../Base/Functor/Functors.h"

BEGIN_TEG_NAMESPACE();

// TODO: tener un timeManager que se encargara en cada render de hacer una llamada al run ...
// TODO: refactoring !!!!
// TODO: allow set the function to be execute whe the elapsed time pass
// TODO: deben existir dos functors uno para cuando alcance el objetivo y el otro para cada intervalo!!

// If the timer don't have time to stop, nSecDuration will be less than 0

// Definition of the structure of a Timer
class Time {
public:
	// TODO: tener un tiempo inicial para estadisticas
	// Attributes
	clock_t last;
	clock_t end;
	bool isRunning;			// is the clock running
	long interval;			// interval to do a task

public:
	// Attributes
	Functor0<void>* funcInterval;
	Functor0<void>* funcEnd;

	// Constructor
	Time(const long& _interval = 1000, const int& nSecDuration = -1);

	// Destructor
	~Time() {
	//	delete funcInterval;
	//	delete funcEnd;
	//	funcInterval = NULL;
	//	funcEnd = NULL;
	}

	// Methods
	bool run();										// Method to run the clock
	void start();
	void stop();									// Method to stop the clock
	void reset();									// Method to reset the clock
	//void setInterval(const long long& _interval);	// Method to set a interval
};

END_TEG_NAMESPACE();

#endif  // UTIL_TIME_H__
