"""Support for Snoo Coordinators."""

import logging

from python_snoo.containers import SnooData, SnooDevice
from python_snoo.snoo import Snoo

from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator

type SnooConfigEntry = ConfigEntry[dict[str, SnooCoordinator]]

_LOGGER = logging.getLogger(__name__)


class SnooCoordinator(DataUpdateCoordinator[SnooData]):
    """Snoo coordinator."""

    config_entry: SnooConfigEntry

    def __init__(
        self,
        hass: HomeAssistant,
        entry: SnooConfigEntry,
        device: SnooDevice,
        snoo: Snoo,
    ) -> None:
        """Set up Snoo Coordinator."""
        super().__init__(
            hass,
            name=device.name,
            config_entry=entry,
            logger=_LOGGER,
        )
        self.device_unique_id = device.serialNumber
        self.device = device
        self.sensor_data_set: bool = False
        self.snoo = snoo

    async def setup(self) -> None:
        """Perform setup needed on every coordintaor creation."""
        self.snoo.start_subscribe(self.device, self.async_set_updated_data)
        # After we subscribe - get the status so that we have something to start with.
        # We only need to do this once. The device will auto update otherwise.
        await self.snoo.get_status(self.device)
