#ifndef COMMAND_H
#define COMMAND_H

#include <functional>
#include <future>

#include <QVariant>

namespace nemo_interface {

class Task {
public:
  typedef std::function<void(std::promise<QVariant> p)> Functor;
  typedef std::function<bool()> BooleanFunctor;

  Task(const Functor &onExec);

  void exec(std::promise<QVariant> p);
  bool isReady();   // default == true
  bool isExpired(); // default == false

  void setOnExec(const Functor &onExec);
  void setIsReady(const BooleanFunctor &isReady);
  void setIsExpired(const BooleanFunctor &isExpired);

private:
  Functor _onExec;
  BooleanFunctor _isExpired;
  BooleanFunctor _isReady;
};
} // namespace nemo_interface

#endif // COMMAND_H
