"""Base class for Tado entity."""
from homeassistant.helpers.entity import Entity

from .const import DEFAULT_NAME, DOMAIN, TADO_HOME, TADO_ZONE


class TadoDeviceEntity(Entity):
    """Base implementation for Tado device."""

    def __init__(self, device_info):
        """Initialize a Tado device."""
        super().__init__()
        self._device_info = device_info
        self.device_name = device_info["serialNo"]
        self.device_id = device_info["shortSerialNo"]

    @property
    def device_info(self):
        """Return the device_info of the device."""
        return {
            "identifiers": {(DOMAIN, self.device_id)},
            "name": self.device_name,
            "manufacturer": DEFAULT_NAME,
            "sw_version": self._device_info["currentFwVersion"],
            "model": self._device_info["deviceType"],
            "via_device": (DOMAIN, self._device_info["serialNo"]),
        }

    @property
    def should_poll(self):
        """Do not poll."""
        return False


class TadoHomeEntity(Entity):
    """Base implementation for Tado home."""

    def __init__(self, tado):
        """Initialize a Tado home."""
        super().__init__()
        self.home_name = tado.home_name
        self.home_id = tado.home_id

    @property
    def device_info(self):
        """Return the device_info of the device."""
        return {
            "identifiers": {(DOMAIN, self.home_id)},
            "name": self.home_name,
            "manufacturer": DEFAULT_NAME,
            "model": TADO_HOME,
        }


class TadoZoneEntity(Entity):
    """Base implementation for Tado zone."""

    def __init__(self, zone_name, home_id, zone_id):
        """Initialize a Tado zone."""
        super().__init__()
        self._device_zone_id = f"{home_id}_{zone_id}"
        self.zone_name = zone_name
        self.zone_id = zone_id

    @property
    def device_info(self):
        """Return the device_info of the device."""
        return {
            "identifiers": {(DOMAIN, self._device_zone_id)},
            "name": self.zone_name,
            "manufacturer": DEFAULT_NAME,
            "model": TADO_ZONE,
            "suggested_area": self.zone_name,
        }

    @property
    def should_poll(self):
        """Do not poll."""
        return False
