# Source code for kasa.interfaces.thermostat

    """Interact with a TPLink Thermostat."""

    from __future__ import annotations

    from abc import ABC, abstractmethod
    from enum import Enum
    from typing import Annotated, Literal

    from ..module import FeatureAttribute, Module

    class ThermostatState(Enum):
        """Thermostat state."""

        Heating = "heating"
        Calibrating = "progress_calibration"
        Idle = "idle"
        Off = "off"
        Unknown = "unknown"

    class Thermostat(Module, ABC):
        """Base class for TP-Link Thermostat."""

        @property
        @abstractmethod
        def state(self) -> bool:
            """Return thermostat state."""

        @abstractmethod
        async def set_state(self, enabled: bool) -> dict:
            """Set thermostat state."""

        @property
        @abstractmethod
        def mode(self) -> ThermostatState:
            """Return thermostat state."""

        @property
        @abstractmethod
        def target_temperature(self) -> Annotated[float, FeatureAttribute()]:
            """Return target temperature."""

        @abstractmethod
        async def set_target_temperature(
            self, target: float
        ) -> Annotated[dict, FeatureAttribute()]:
            """Set target temperature."""

        @property
        @abstractmethod
        def temperature(self) -> Annotated[float, FeatureAttribute()]:
            """Return current humidity in percentage."""
            return self._device.sys_info["current_temp"]

        @property
        @abstractmethod
        def temperature_unit(self) -> Literal["celsius", "fahrenheit"]:
            """Return current temperature unit."""

        @abstractmethod
        async def set_temperature_unit(
            self, unit: Literal["celsius", "fahrenheit"]
        ) -> dict:
            """Set the device temperature unit."""