"""Implementation of vacuum speaker."""

from __future__ import annotations

import logging
from typing import Annotated

from ...feature import Feature
from ...module import FeatureAttribute
from ..smartmodule import SmartModule

_LOGGER = logging.getLogger(__name__)


class Speaker(SmartModule):
    """Implementation of vacuum speaker."""

    REQUIRED_COMPONENT = "speaker"

    def _initialize_features(self) -> None:
        """Initialize features."""
        self._add_feature(
            Feature(
                self._device,
                id="locate",
                name="Locate device",
                container=self,
                attribute_setter="locate",
                category=Feature.Category.Primary,
                type=Feature.Action,
            )
        )
        self._add_feature(
            Feature(
                self._device,
                id="volume",
                name="Volume",
                container=self,
                attribute_getter="volume",
                attribute_setter="set_volume",
                range_getter=lambda: (0, 100),
                category=Feature.Category.Config,
                type=Feature.Type.Number,
            )
        )

    def query(self) -> dict:
        """Query to execute during the update cycle."""
        return {
            "getVolume": None,
        }

    @property
    def volume(self) -> Annotated[str, FeatureAttribute()]:
        """Return volume."""
        return self.data["volume"]

    async def set_volume(self, volume: int) -> Annotated[dict, FeatureAttribute()]:
        """Set volume."""
        if volume < 0 or volume > 100:
            raise ValueError("Volume must be between 0 and 100")

        return await self.call("setVolume", {"volume": volume})

    async def locate(self) -> dict:
        """Play sound to locate the device."""
        return await self.call("playSelectAudio", {"audio_type": "seek_me"})