#ifndef PLAUSIBILITY_HEADERFILE
#define PLAUSIBILITY_HEADERFILE

#include "HistoryModule.h"
#include "Module.h"

class ConfidenceModule : public Module {

private:
  bool confidence;

  // plausibility
  float lower_bound, upper_bound;
  bool flag_lower_bound_exist, flag_upper_bound_exist;

  // consistency
  float rates_of_change;
  bool flag_rates_of_change_exist;
  float value_before_value_got_inconsistence;
  bool flag_value_got_inconsistence;

  // TODO: Changes of Other Sensors (e.g. Environment Temperature Sensor)

  // private functions
  void initialize_confidence_validator(float lower_bound,
                                       bool flag_lower_bound_exist,
                                       float upper_bound,
                                       bool flag_upper_bound_exist,
                                       float rates_of_change,
                                       bool flag_rates_of_change_exist);

public:
  ConfidenceModule(float lower_bound, bool flag_lower_bound_exist,
                   float upper_bound, bool flag_upper_bound_exist,
                   float rates_of_change, bool flag_rates_of_change_exist);
  ConfidenceModule(char *name, float lower_bound, bool flag_lower_bound_exist,
                   float upper_bound, bool flag_upper_bound_exist,
                   float rates_of_change, bool flag_rates_of_change_exist);

  bool validate_confidence(float input /*, HistoryModule* historyModule*/);
  bool get_confidence();

  void set_lower_bound(float lower_bound);
  float get_lower_bound();

  void set_flag_lower_bound_exist(bool flag);
  bool get_flag_lower_bound_exist();

  void set_upper_bound(float upper_bound);
  float get_upper_bound();

  void set_flag_upper_bound_exist(bool flag);
  bool get_flag_upper_bound_exist();

  void set_rates_of_change(float rates);
  float get_rates_of_change();

  void set_flag_rates_of_change_exist(bool flag);
  bool get_flag_rates_of_change_exist();
};

#endif
