"""Base Entity for Roku."""

from __future__ import annotations

from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, DeviceInfo
from homeassistant.helpers.entity import EntityDescription
from homeassistant.helpers.update_coordinator import CoordinatorEntity

from .const import DOMAIN
from .coordinator import RokuDataUpdateCoordinator


class RokuEntity(CoordinatorEntity[RokuDataUpdateCoordinator]):
    """Defines a base Roku entity."""

    _attr_has_entity_name = True

    def __init__(
        self,
        *,
        coordinator: RokuDataUpdateCoordinator,
        description: EntityDescription | None = None,
    ) -> None:
        """Initialize the Roku entity."""
        super().__init__(coordinator)

        if description is not None:
            self.entity_description = description
            self._attr_unique_id = f"{coordinator.device_id}_{description.key}"
        else:
            self._attr_unique_id = coordinator.device_id

        self._attr_device_info = DeviceInfo(
            identifiers={(DOMAIN, coordinator.device_id)},
            connections={
                (CONNECTION_NETWORK_MAC, mac_address)
                for mac_address in (
                    self.coordinator.data.info.wifi_mac,
                    self.coordinator.data.info.ethernet_mac,
                )
                if mac_address is not None
            },
            name=self.coordinator.data.info.name,
            manufacturer=self.coordinator.data.info.brand,
            model=self.coordinator.data.info.model_name,
            hw_version=self.coordinator.data.info.model_number,
            sw_version=self.coordinator.data.info.version,
            suggested_area=self.coordinator.data.info.device_location,
        )
