class ConditionEngine:

	def __init__(self):
		self.evaluation_queue = EvaluationQueue(self)

	def init(self, system, state, router, task_scheduler):
		self.system = system
		self.router = router
		self.load_conditions(state)
		self.evaluation_queue.start()

	def load_conditions(self, state):
		condition_json = []
		try:
			condition_json = json.load(open('conditions.json','r+'))
		except:
			pass
		condition_list = []

		for condition in condition_json: #for each node in the configuration file
			condition_module = condition['module']
			condition_class = condition['class']
			new_condition = getattr(globals()[condition_module], condition_class)(state, self) # create the condition object...
			condition_list.append(new_condition)
			logger.info('Added new condition: ' + condition_class)

		self.condition_list = condition_list

	def evaluate_conditions(self, node_label, command):
		logger.info('Beginning evaluation: ' + str(command))
		for condition in self.condition_list:
			condition.evaluate(node_label, command)

	def add_message(self, message):
		self.evaluation_queue.add_message(message)

	def add_to_task_scheduler(self, message):
		self.task_scheduler.add_task(message)

	def send_to_node(self, node_label, message):
		self.router.send_to_node(node_label, message)

	def get_from_node(self, node_label, arguments):
		self.router.get_from_node(node_label, arguments)

	def send_to_system(self, node_label, message):
		self.system.send(node_label, message)

	def stop(self):
		self.evaluation_queue.stop()
	def __init__(self):
		self.evaluation_queue = EvaluationQueue(self)