#ifndef PLAUSIBILITY_HEADERFILE
#define PLAUSIBILITY_HEADERFILE

#include "Module.h"
#include "HistoryModule.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