"""Spook - Your homie.""" from __future__ import annotations from dataclasses import dataclass from typing import TYPE_CHECKING from homeassistant.components.event import EventEntity, EventEntityDescription from homeassistant.core import Event, HomeAssistant, callback from homeassistant.helpers.issue_registry import EVENT_REPAIRS_ISSUE_REGISTRY_UPDATED from ...entity import SpookEntityDescription from .entity import RepairsSpookEntity if TYPE_CHECKING: from homeassistant.config_entries import ConfigEntry from homeassistant.helpers.entity_platform import AddEntitiesCallback @dataclass(frozen=True, kw_only=True) class RepairsSpookEventEntityDescription( SpookEntityDescription, EventEntityDescription, ): """Class describing Spook Repairs event entities.""" async def async_setup_entry( _hass: HomeAssistant, _entry: ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Spook event.""" async_add_entities( [ RepairsSpookEventEntity( RepairsSpookEventEntityDescription( key="event", translation_key="repairs_event", entity_id="event.repair", event_types=["create", "remove", "update"], ), ), ], ) class RepairsSpookEventEntity(RepairsSpookEntity, EventEntity): """Spook sensor providing repairs information.""" entity_description: RepairsSpookEventEntityDescription _attr_name = None @callback def _handle_repairs_issue_registry_updated_event(self, event: Event) -> None: """Handle repairs issue registry updates.""" data = {**event.data} if (event_type := data.pop("action", None)) is None: return self._trigger_event(event_type, data) self.async_schedule_update_ha_state() async def async_added_to_hass(self) -> None: """Register for event updates.""" self.async_on_remove( self.hass.bus.async_listen( EVENT_REPAIRS_ISSUE_REGISTRY_UPDATED, self._handle_repairs_issue_registry_updated_event, ), )