from typing import Collection, Optional

from platypush.message.event import Event


class BluetoothEvent(Event):
    """
    Base class for Bluetooth Low-Energy device events.
    """

    def __init__(
        self,
        *args,
        address: str,
        connected: bool,
        paired: bool,
        trusted: bool,
        blocked: bool,
        name: Optional[str] = None,
        service_uuids: Optional[Collection[str]] = None,
        **kwargs
    ):
        """
        :param address: The Bluetooth address of the device.
        :param connected: Whether the device is connected.
        :param paired: Whether the device is paired.
        :param trusted: Whether the device is trusted.
        :param blocked: Whether the device is blocked.
        :param name: The name of the device.
        :param service_uuids: The service UUIDs of the device.
        """
        super().__init__(
            *args,
            address=address,
            name=name,
            connected=connected,
            paired=paired,
            blocked=blocked,
            trusted=trusted,
            service_uuids=service_uuids or [],
            **kwargs
        )


class BluetoothDeviceFoundEvent(BluetoothEvent):
    """
    Event triggered when a Bluetooth device is discovered during a scan.
    """


class BluetoothDeviceLostEvent(BluetoothEvent):
    """
    Event triggered when a previously discovered Bluetooth device is lost.
    """


class BluetoothDeviceConnectedEvent(BluetoothEvent):
    """
    Event triggered when a Bluetooth device is connected.
    """


class BluetoothDeviceDisconnectedEvent(BluetoothEvent):
    """
    Event triggered when a Bluetooth device is disconnected.
    """


class BluetoothDevicePairedEvent(BluetoothEvent):
    """
    Event triggered when a Bluetooth device is paired.
    """


class BluetoothDeviceUnpairedEvent(BluetoothEvent):
    """
    Event triggered when a Bluetooth device is unpaired.
    """


class BluetoothDeviceBlockedEvent(BluetoothEvent):
    """
    Event triggered when a Bluetooth device is blocked.
    """


class BluetoothDeviceUnblockedEvent(BluetoothEvent):
    """
    Event triggered when a Bluetooth device is unblocked.
    """


class BluetoothDeviceTrustedEvent(BluetoothEvent):
    """
    Event triggered when a Bluetooth device is trusted.
    """


class BluetoothDeviceUntrustedEvent(BluetoothEvent):
    """
    Event triggered when a Bluetooth device is untrusted.
    """


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