int main(int argc, char ** argv){


	NodeType type;
	if(strcmp(argv[1],"sink")==0){
		type = SINK;
	}
	if(strcmp(argv[1],"camera")==0){
		type = CAMERA;
	}
	if(strcmp(argv[1],"cooperator")==0){
		type = COOPERATOR;
	}

	NodeManager *nodeMng;
	RadioSystem *radioSys;
	TaskManager *taskMng;
	S2GInterface *s2ginterface;
	MessageParser *msg_parser;
	//ConnectionManager *connMng;
	boost::asio::io_service io_service;

	switch(type){
	case SINK:{
		//create the main components
		nodeMng  = new NodeManager(SINK, argv[6]);
		msg_parser = new MessageParser();
		radioSys = new RadioSystem(nodeMng, msg_parser,argv[3],argv[4],argv[5]);
		taskMng  = new TaskManager(nodeMng);


		nodeMng->set_radioSystem(radioSys);
		nodeMng->set_taskManager(taskMng);

		//start the task manager
		taskMng->start();

		//start a telosb receiver
		radioSys->startTelosbReceiver(argv[2], argv[6]);

		//start the sink2gui interface
		tcp::resolver resolver(io_service);
		tcp::resolver::query query("localhost", "1234");
		tcp::resolver::iterator iterator = resolver.resolve(query);
		s2ginterface = new S2GInterface(nodeMng, msg_parser, io_service, iterator);
		s2ginterface->startInterface();
		nodeMng->set_s2gInterface(s2ginterface);



		break;
	}
	case CAMERA:{
		nodeMng  = new NodeManager(CAMERA, argv[6]);
		msg_parser = new MessageParser();
		radioSys = new RadioSystem(nodeMng,msg_parser,argv[3],argv[4],argv[5]);

		
		taskMng  = new TaskManager(nodeMng);
		//connMng = new ConnectionManager();

		nodeMng->set_radioSystem(radioSys);
		nodeMng->set_taskManager(taskMng);

		//start the task manager
		taskMng->start();

		//start a telosb receiver
		radioSys->startTelosbReceiver(argv[2], argv[6]);

		//start the WiFi manager
		radioSys->startWiFiReceiver();


		radioSys->joinTelosbReceiver();
		break;
	}
	case COOPERATOR:{
		nodeMng  = new NodeManager(COOPERATOR,argv[6]);
		msg_parser = new MessageParser();
		radioSys = new RadioSystem(nodeMng,msg_parser,argv[3],argv[4],argv[5]);
		taskMng  = new TaskManager(nodeMng);

		nodeMng->set_radioSystem(radioSys);
		nodeMng->set_taskManager(taskMng);


		//start the task manager
		taskMng->start();
		
		radioSys->startWiFiReceiver(); //ALEXIS 15/12 WIFI CLASS
		
		break;
	}
	default:

		break;
	}


	taskMng->join();


	return 0;
}