#ifndef DECISION_TOOL_HH
#define DECISION_TOOL_HH

#include <vector>
#include "SmartSamplerData.hh"

#define NGULPERS 10

/****************************************************************************
 *
 * This class provides a generic interface for the decision making tools.
 * 
 * The idea is to enable the following methods, the implementation of which
 * will depend on the model being used:
 *
 * constructor -- Expected to take an instance name.
 * loadConfig  -- Load configuration file.  ALSO: initialize data manager.
 * update    -- update the state and return true (fire) or false (don't fire)
 * reset     -- reset internal state
 *
 ****************************************************************************/
class DecisionTool {
public:
  enum model_type{
    dt_model_none = 0,
    dt_model_simplethreshold, // for testing
    dt_model_clusterhmm,
    dt_model_frontmomentum,
    dt_model_gpthreshold,
    dt_model_gponline,
    dt_model_outofrange
  };

  virtual ~DecisionTool()=0;

  static DecisionTool *genDT(model_type genModel, char *instname);

  // The following are meant to be overloaded by child
  virtual void loadConfig(char *cfgname,SmartSamplerData *ssdIn) = 0;
  virtual bool update() = 0;
  virtual void reset() = 0;
}; // DecisionTool

#endif // DECISION_TOOL_HH 
