from platypush.plugins import Plugin, action


class SwitchPlugin(Plugin):
    """
    Abstract class for interacting with switch devices
    """

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    @action
    def on(self, device, *args, **kwargs):
        """ Turn the device on """
        raise NotImplementedError()

    @action
    def off(self, device, *args, **kwargs):
        """ Turn the device off """
        raise NotImplementedError()

    @action
    def toggle(self, device, *args, **kwargs):
        """ Toggle the device status (on/off) """
        raise NotImplementedError()

    @action
    def status(self, device=None, *args, **kwargs):
        """ Get the status of a specified device or of all the configured devices (default)"""
        devices = self.devices
        if device:
            devices = [d for d in self.devices if d.get('id') == device or d.get('name') == device]
            if devices:
                return self.devices.pop(0)
            else:
                return None

        return devices

    @property
    def devices(self):
        raise NotImplementedError()


# vim:sw=4:ts=4:et: