"""Support for LightwaveRF switches."""
from __future__ import annotations

from typing import Any

from homeassistant.components.switch import SwitchEntity
from homeassistant.const import CONF_NAME
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType

from . import LIGHTWAVE_LINK


async def async_setup_platform(
    hass: HomeAssistant,
    config: ConfigType,
    async_add_entities: AddEntitiesCallback,
    discovery_info: DiscoveryInfoType | None = None,
) -> None:
    """Find and return LightWave switches."""
    if not discovery_info:
        return

    switches = []
    lwlink = hass.data[LIGHTWAVE_LINK]

    for device_id, device_config in discovery_info.items():
        name = device_config[CONF_NAME]
        switches.append(LWRFSwitch(name, device_id, lwlink))

    async_add_entities(switches)


class LWRFSwitch(SwitchEntity):
    """Representation of a LightWaveRF switch."""

    _attr_should_poll = False

    def __init__(self, name, device_id, lwlink):
        """Initialize LWRFSwitch entity."""
        self._attr_name = name
        self._device_id = device_id
        self._lwlink = lwlink

    async def async_turn_on(self, **kwargs: Any) -> None:
        """Turn the LightWave switch on."""
        self._attr_is_on = True
        self._lwlink.turn_on_switch(self._device_id, self._attr_name)
        self.async_write_ha_state()

    async def async_turn_off(self, **kwargs: Any) -> None:
        """Turn the LightWave switch off."""
        self._attr_is_on = False
        self._lwlink.turn_off(self._device_id, self._attr_name)
        self.async_write_ha_state()
