from .const import KEY_TEMP_SENSOR as KEY_TEMP_SENSOR, STATUS_UPDATE_MAX_TIME_INTERVAL as STATUS_UPDATE_MAX_TIME_INTERVAL
from _typeshed import Incomplete
from aiohttp.web import Request as Request, Response
from collections.abc import Callable as Callable
from datetime import datetime
from homeassistant.core import CALLBACK_TYPE as CALLBACK_TYPE, HassJob as HassJob, HomeAssistant as HomeAssistant, callback as callback
from homeassistant.helpers import event as event
from homeassistant.helpers.update_coordinator import BaseDataUpdateCoordinatorProtocol as BaseDataUpdateCoordinatorProtocol
from typing import Any
from webio_api import WebioAPI as WebioAPI

_LOGGER: Incomplete
KEY_INPUTS: str
KEY_OUTPUTS: str
KEY_THERMOSTAT: str
KEY_ZONES: str

class NotificationCoordinator:
    _coordinators: dict[str, NASwebCoordinator]
    def __init__(self) -> None: ...
    def add_coordinator(self, serial: str, coordinator: NASwebCoordinator) -> None: ...
    def remove_coordinator(self, serial: str) -> None: ...
    def has_coordinators(self) -> bool: ...
    async def check_connection(self, serial: str) -> bool: ...
    async def handle_webhook_request(self, hass: HomeAssistant, webhook_id: str, request: Request) -> Response | None: ...

class NASwebCoordinator(BaseDataUpdateCoordinatorProtocol):
    _hass: Incomplete
    name: Incomplete
    webio_api: Incomplete
    _last_update: float | None
    _job: Incomplete
    _unsub_last_update_check: CALLBACK_TYPE | None
    _listeners: dict[CALLBACK_TYPE, tuple[CALLBACK_TYPE, object | None]]
    def __init__(self, hass: HomeAssistant, webio_api: WebioAPI, name: str = 'NASweb[default]') -> None: ...
    def is_connection_confirmed(self) -> bool: ...
    @callback
    def async_add_listener(self, update_callback: CALLBACK_TYPE, context: Any = None) -> Callable[[], None]: ...
    data: Incomplete
    last_update: Incomplete
    @callback
    def async_set_updated_data(self, data: dict[str, Any]) -> None: ...
    @callback
    def async_update_listeners(self) -> None: ...
    async def _handle_max_update_interval(self, now: datetime) -> None: ...
    def _schedule_last_update_check(self) -> None: ...
    def _async_unsub_last_update_check(self) -> None: ...
    async def handle_push_notification(self, notification: dict) -> None: ...
    async def process_status_update(self, new_status: dict) -> None: ...
