"""Module for childsetup interface.

The childsetup module allows pairing and unpairing of supported child device types to
hubs.

>>> from kasa import Discover, Module, LightState
>>>
>>> dev = await Discover.discover_single(
>>>     "127.0.0.6",
>>>     username="user@example.com",
>>>     password="great_password"
>>> )
>>> await dev.update()
>>> print(dev.alias)
Tapo Hub

>>> childsetup = dev.modules[Module.ChildSetup]
>>> childsetup.supported_categories
['camera', 'subg.trv', 'subg.trigger', 'subg.plugswitch']

Put child devices in pairing mode.
The hub will pair with all supported devices in pairing mode:

>>> added = await childsetup.pair()
>>> added
[{'device_id': 'SCRUBBED_CHILD_DEVICE_ID_5', 'category': 'subg.trigger.button', \
'device_model': 'S200B', 'name': 'I01BU0tFRF9OQU1FIw===='}]

>>> for child in dev.children:
>>>     print(f"{child.device_id} - {child.model}")
SCRUBBED_CHILD_DEVICE_ID_1 - T310
SCRUBBED_CHILD_DEVICE_ID_2 - T315
SCRUBBED_CHILD_DEVICE_ID_3 - T110
SCRUBBED_CHILD_DEVICE_ID_4 - S200B
SCRUBBED_CHILD_DEVICE_ID_5 - S200B

Unpair with the child `device_id`:

>>> await childsetup.unpair("SCRUBBED_CHILD_DEVICE_ID_4")
>>> for child in dev.children:
>>>     print(f"{child.device_id} - {child.model}")
SCRUBBED_CHILD_DEVICE_ID_1 - T310
SCRUBBED_CHILD_DEVICE_ID_2 - T315
SCRUBBED_CHILD_DEVICE_ID_3 - T110
SCRUBBED_CHILD_DEVICE_ID_5 - S200B

"""

from __future__ import annotations

from abc import ABC, abstractmethod

from ..module import Module


class ChildSetup(Module, ABC):
    """Interface for child setup on hubs."""

    @property
    @abstractmethod
    def supported_categories(self) -> list[str]:
        """Supported child device categories."""

    @abstractmethod
    async def pair(self, *, timeout: int = 10) -> list[dict]:
        """Scan for new devices and pair them."""

    @abstractmethod
    async def unpair(self, device_id: str) -> dict:
        """Remove device from the hub."""