"""Base entity for the Elgato integration."""

from __future__ import annotations

from homeassistant.const import ATTR_CONNECTIONS, CONF_MAC
from homeassistant.helpers.device_registry import (
    CONNECTION_NETWORK_MAC,
    DeviceInfo,
    format_mac,
)
from homeassistant.helpers.update_coordinator import CoordinatorEntity

from .const import DOMAIN
from .coordinator import ElgatoDataUpdateCoordinator


class ElgatoEntity(CoordinatorEntity[ElgatoDataUpdateCoordinator]):
    """Defines an Elgato entity."""

    _attr_has_entity_name = True

    def __init__(self, coordinator: ElgatoDataUpdateCoordinator) -> None:
        """Initialize an Elgato entity."""
        super().__init__(coordinator=coordinator)
        self._attr_device_info = DeviceInfo(
            identifiers={(DOMAIN, coordinator.data.info.serial_number)},
            serial_number=coordinator.data.info.serial_number,
            manufacturer="Elgato",
            model=coordinator.data.info.product_name,
            name=coordinator.data.info.display_name,
            sw_version=f"{coordinator.data.info.firmware_version} ({coordinator.data.info.firmware_build_number})",
            hw_version=str(coordinator.data.info.hardware_board_type),
        )
        if (mac := coordinator.config_entry.data.get(CONF_MAC)) is not None:
            self._attr_device_info[ATTR_CONNECTIONS] = {
                (CONNECTION_NETWORK_MAC, format_mac(mac))
            }
