#include "attach_modules.h"
#include <cstdio>
//#include "rlutil.h"

//using namespace rlutil;

bool attach_historyModuleToSensorSlotInAgent(Agent* agent, Sensor* sensor, Channel* inputPort, HistoryModule* historyModule) {
	if(agent != NULL && inputPort != NULL && historyModule != NULL) {
		SensorSlotOfAgent* sensorSlotOfAgent = agent->get_sensorHandlerOfAgent()->get_sensorSlotAddress(inputPort);
		if(sensorSlotOfAgent != NULL) {
			printf("   > HistoryModule ");
			//setColor(TXTCOLOR_LIGHTCYAN);
			printf("%s ", historyModule->get_name());
			//setColor(TXTCOLOR_GREY);
			printf("(id: %03u) ", historyModule->get_id());
			if(sensorSlotOfAgent->set_historyModule(historyModule)) {
				//setColor(TXTCOLOR_LIGHTGREEN);
				printf("attached ");
				//setColor(TXTCOLOR_GREY);
				printf("to Sensor ");
				//setColor(TXTCOLOR_LIGHTCYAN);
				printf("%s ", sensor->get_name());
				//setColor(TXTCOLOR_GREY);
				printf("(id: %03u) in Agent ", sensor->get_id());
				//setColor(TXTCOLOR_LIGHTCYAN);
				printf("%s ", agent->get_name());
				//setColor(TXTCOLOR_GREY);
				printf("(id: %03u)\n", agent->get_id());
				return true;
			}
			else {
				//setColor(TXTCOLOR_LIGHTRED);
				printf("Couldn't attach the HistoryModule!\n");
				//setColor(TXTCOLOR_GREY);
			}
		}
		else {
			//setColor(TXTCOLOR_LIGHTRED);
			printf("   > Couldn't attach the HistoryModule because Sensor isn't mounted in %s (id: %03u)!\n", agent->get_name(), agent->get_id());
			//setColor(TXTCOLOR_GREY);
		}
	}
	else {
		//setColor(TXTCOLOR_LIGHTRED);
		printf("   > Couldn't attach the HistoryModule because Agent, Channel, or HistoryModule is not valid!\n");
		//setColor(TXTCOLOR_GREY);
	}
	return false;
}
