#ifndef CREATE_UNIT_HEADERFILE
#define CREATE_UNIT_HEADERFILE

#include "Agent.h"
#include "CSVreaderModule.h"
#include "HistoryModule.h"
#include "Sensor.h"
#include "Testbench.h"

/*
#include "Testbench.h"
#include "Lookuptable.h"
#include "ConfidenceModule.h"
#include "Bunch_Module.h"
*/

#define CSV_MODE_READ  0
#define CSV_MODE_WRITE 1

Agent create_agent();
Agent create_agent(char* name);

/*
Agent create_agent(unsigned int abstraction_method);
Agent create_agent(char* name, unsigned int abstraction_method);
*/

Sensor create_sensor();
Sensor create_sensor(char* name);

HistoryModule create_historyModule(unsigned int history_length, int delimitation_mode);
HistoryModule create_historyModule(char* name, unsigned int history_length, int delimitation_mode);

Channel create_channel(unsigned int transfer_rate);
Channel create_channel(char* name, unsigned int transfer_rate);

Testbench create_testbench();
Testbench create_testbench(char* name);

/*
Lookuptable create_lookuptable();
Lookuptable create_lookuptable(char* name);

ConfidenceModule create_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);
ConfidenceModule create_confidence_validator(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);

AbstractionModule create_abstraction_module(Lookuptable* lut, unsigned int abstraction_method);
AbstractionModule create_abstraction_module(char* name, Lookuptable* lut, unsigned int abstraction_method);

Bunch_Module create_bunch_module(unsigned int bunch_method);
Bunch_Module create_bunch_module(char* name, unsigned int bunch_method);
*/

CSVreaderModule create_CSVreaderModule(char* filepath, unsigned int column, unsigned int start_row);
CSVreaderModule create_CSVreaderModule(char* name, char* filepath, unsigned int column, unsigned int start_row);



#endif