import re

from core import ConfigurationManager
from core.NeuroneLauncher import NeuroneLauncher


class OrderAnalyser:
    def __init__(self, order, main_controller=None):
        """
        Class used to load
        :param order: spelt order
        :param main_controller
        """
        self.main_controller = main_controller
        self.order = order
        self.brain = ConfigurationManager.get_brain()
        print "Receiver order: %s" % self.order

    def start(self):
        print self.brain

        for el in self.brain:
            # print el
            # print el["when"]
            whens = el["when"]
            for when in whens:
                brain_order = when["order"]
                # print "order to test: %s" % brain_order
                if self._spelt_order_match_brain_order(brain_order):
                    print "Order found! Run neurons: %s" % el["neurons"]
                    neurons = el["neurons"]
                    for neuron in neurons:
                        NeuroneLauncher.start_neurone(neuron)

        # once we ran all plugin, we can start back jarvis trigger
        if self.main_controller is not None:
            self.main_controller.unpause_jarvis_trigger()

    def _spelt_order_match_brain_order(self, order_to_test):
        """
        test if the current order match the order spelt by the user
        :param order_to_test:
        :return:
        """
        my_regex = r"\b(?=\w)" + re.escape(order_to_test) + r"\b(?!\w)"

        if re.search(my_regex, self.order, re.IGNORECASE):
            return True
        return False