from openmtc_app.onem2m import XAE


class SimpleDecision(XAE):
    remove_registration = True
    remote_cse = '/mn-cse-1/onem2m'
    period = 10

    def _on_register(self):
        # init variables
        self.switchContainers = []
        # start endless loop
        self.periodic_discover(self.remote_cse,
                               {'labels': ["openmtc:actuator_data"]},
                               self.period, self.handle_discovery_switch)
        self.periodic_discover(self.remote_cse,
                               {'labels': ["openmtc:sensor_data:command"]},
                               self.period, self.handle_discovery_command)
        self.periodic_discover(self.remote_cse,
                               {'labels': ["openmtc:sensor_data:brightness"]},
                               self.period, self.handle_discovery_brightness)

    def handle_discovery_switch(self, discovery):
        for uri in discovery:
            self.switchContainers.append(uri)

    def handle_discovery_command(self, discovery):
        for uri in discovery:
            self.add_container_subscription(uri, self.handle_command)

    def handle_discovery_brightness(self, discovery):
        for uri in discovery:
            self.add_container_subscription(uri, self.handle_brightness)

    def handle_command(self, container, content):
        command = "ON" if content[0]['v'] == 1 else "OFF"
        for switch in self.switchContainers:
            self.push_content(switch, command)

    def handle_brightness(self, container, content):
        command = "ON" if content[0]['v'] < 500.0 else "OFF"
        for switch in self.switchContainers:
            self.push_content(switch, command)


if __name__ == "__main__":
    from openmtc_app.flask_runner import SimpleFlaskRunner as Runner

    ep = "http://localhost:8000"
    Runner(SimpleDecision(), port=6050, host='auto').run(ep)
