from .const import DOMAIN as DOMAIN
from _typeshed import Incomplete
from collections.abc import Awaitable
from homeassistant.config_entries import ConfigEntry as ConfigEntry
from homeassistant.const import CONF_HOST as CONF_HOST
from homeassistant.core import HomeAssistant as HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady as ConfigEntryNotReady, HomeAssistantError as HomeAssistantError
from homeassistant.helpers.aiohttp_client import async_get_clientsession as async_get_clientsession
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator as DataUpdateCoordinator
from sn2 import Device, InformationData as InformationData, OnOffSetting
from sn2.device import Setting as Setting, UpdateEvent as UpdateEvent

_LOGGER: Incomplete
type SystemNexa2ConfigEntry = ConfigEntry[SystemNexa2DataUpdateCoordinator]

class InsufficientDeviceInformation(Exception): ...

class SystemNexa2Data:
    __slots__: Incomplete
    info_data: InformationData
    unique_id: str
    on_off_settings: dict[str, OnOffSetting]
    state: float | None
    def __init__(self) -> None: ...
    def update_settings(self, settings: list[Setting]) -> None: ...

class SystemNexa2DataUpdateCoordinator(DataUpdateCoordinator[SystemNexa2Data]):
    config_entry: SystemNexa2ConfigEntry
    info_data: InformationData
    device: Device
    _state_received_once: bool
    data: Incomplete
    def __init__(self, hass: HomeAssistant, config_entry: SystemNexa2ConfigEntry) -> None: ...
    async def async_setup(self) -> None: ...
    async def _async_handle_update(self, event: UpdateEvent) -> None: ...
    async def _async_sn2_call_with_error_handling(self, coro: Awaitable[None]) -> None: ...
    async def async_turn_on(self) -> None: ...
    async def async_turn_off(self) -> None: ...
    async def async_toggle(self) -> None: ...
    async def async_set_brightness(self, value: float) -> None: ...
    async def async_setting_enable(self, setting: OnOffSetting) -> None: ...
    async def async_setting_disable(self, setting: OnOffSetting) -> None: ...
