from homeassistant.components.switch import SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity

from .const import DOMAIN
from .coordinator import SmS4IoTCoordinator


async def async_setup_entry(
    hass: HomeAssistant,
    entry: ConfigEntry,
    async_add_entities: AddEntitiesCallback,
) -> None:
    coordinator: SmS4IoTCoordinator = hass.data[DOMAIN][entry.entry_id]
    async_add_entities([SmS4IoTSwitch(coordinator, entry)])


class SmS4IoTSwitch(CoordinatorEntity, SwitchEntity):
    def __init__(self, coordinator: SmS4IoTCoordinator, entry: ConfigEntry) -> None:
        super().__init__(coordinator)
        device_id = entry.data["device_id"]
        self._attr_unique_id = f"{device_id}_relay"
        self._attr_name = f"SMS4IoT {device_id} Switch"
        self._attr_icon = "mdi:toggle-switch"
        self._attr_device_info = {
            "identifiers": {(DOMAIN, device_id)},
            "name": f"SMS4IoT {device_id}",
            "manufacturer": "SMS4IoT",
        }

    @property
    def is_on(self) -> bool:
        if not self.coordinator.data:
            return False
        return self.coordinator.data.get("relay", "off").lower() in ("on", "1", "true")

    async def async_turn_on(self, **kwargs) -> None:
        await self.coordinator.async_write_command("setrelay on")
        await self.coordinator.async_request_refresh()

    async def async_turn_off(self, **kwargs) -> None:
        await self.coordinator.async_write_command("setrelay off")
        await self.coordinator.async_request_refresh()
