"""Base entity for the Pterodactyl integration."""

from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_URL
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity

from .api import PterodactylData
from .const import DOMAIN
from .coordinator import PterodactylCoordinator

MANUFACTURER = "Pterodactyl"


class PterodactylEntity(CoordinatorEntity[PterodactylCoordinator]):
    """Representation of a Pterodactyl base entity."""

    _attr_has_entity_name = True

    def __init__(
        self,
        coordinator: PterodactylCoordinator,
        identifier: str,
        config_entry: ConfigEntry,
    ) -> None:
        """Initialize base entity."""
        super().__init__(coordinator)

        self.identifier = identifier
        self._attr_device_info = DeviceInfo(
            identifiers={(DOMAIN, identifier)},
            manufacturer=MANUFACTURER,
            name=self.game_server_data.name,
            model=self.game_server_data.name,
            model_id=self.game_server_data.uuid,
            configuration_url=f"{config_entry.data[CONF_URL]}/server/{identifier}",
        )

    @property
    def available(self) -> bool:
        """Return binary sensor availability."""
        return super().available and self.identifier in self.coordinator.data

    @property
    def game_server_data(self) -> PterodactylData:
        """Return game server data."""
        return self.coordinator.data[self.identifier]