#ifndef TESTBENCH_HEADERFILE
#define TESTBENCH_HEADERFILE

#include "AgentSlotOfTestbench.h"
#include "CSVreaderModule.h"
#include "ChannelSlotOfTestbench.h"
#include "SensorSlotOfTestbench.h"
#include "Unit.h"
#include <vector>

using namespace std;

class Testbench : public Module {

private:
  // TODO: set- and get function for maxNumOf_registeredAgents;
  vector<AgentSlotOfTestbench *> vector_registeredAgents;
  unsigned int maxNumOf_registeredAgents;

  // TODO: set- and get function for maxNumOf_registeredChannels;
  vector<ChannelSlotOfTestbench *> vector_registeredChannels;
  unsigned int maxNumOf_registeredChannels;

  // TODO: set- and get function for maxNumOf_registeredSensors;
  vector<SensorSlotOfTestbench *> vector_registeredSensors;
  unsigned int maxNumOf_registeredSensors;

  void init_testbench();

public:
  Testbench();
  Testbench(const char *name);

  bool register_agent(Agent *agent);

  bool register_sensor(Sensor *sensor);
  SensorSlotOfTestbench *get_sensorSlotAddressOfTestbench(Sensor *sensor);

  bool register_channel(Channel *channel);

  void simulate(unsigned int rounds);
};

#endif
