import axis
from .const import ATTR_MANUFACTURER as ATTR_MANUFACTURER, CONF_EVENTS as CONF_EVENTS, CONF_STREAM_PROFILE as CONF_STREAM_PROFILE, CONF_VIDEO_SOURCE as CONF_VIDEO_SOURCE, DEFAULT_EVENTS as DEFAULT_EVENTS, DEFAULT_STREAM_PROFILE as DEFAULT_STREAM_PROFILE, DEFAULT_TRIGGER_TIME as DEFAULT_TRIGGER_TIME, DEFAULT_VIDEO_SOURCE as DEFAULT_VIDEO_SOURCE, LOGGER as LOGGER, PLATFORMS as PLATFORMS
from .errors import AuthenticationRequired as AuthenticationRequired, CannotConnect as CannotConnect
from _typeshed import Incomplete
from axis.stream_manager import Signal
from homeassistant.components import mqtt as mqtt
from homeassistant.components.mqtt.models import ReceiveMessage as ReceiveMessage
from homeassistant.config_entries import ConfigEntry as ConfigEntry
from homeassistant.const import CONF_HOST as CONF_HOST, CONF_MODEL as CONF_MODEL, CONF_NAME as CONF_NAME, CONF_PASSWORD as CONF_PASSWORD, CONF_PORT as CONF_PORT, CONF_TRIGGER_TIME as CONF_TRIGGER_TIME, CONF_USERNAME as CONF_USERNAME
from homeassistant.core import Event as Event, HomeAssistant as HomeAssistant, callback as callback
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC as CONNECTION_NETWORK_MAC
from homeassistant.helpers.dispatcher import async_dispatcher_send as async_dispatcher_send
from homeassistant.helpers.httpx_client import get_async_client as get_async_client
from homeassistant.setup import async_when_setup as async_when_setup
from types import MappingProxyType
from typing import Any

class AxisNetworkDevice:
    hass: Incomplete
    config_entry: Incomplete
    api: Incomplete
    available: bool
    fw_version: Incomplete
    product_type: Incomplete
    additional_diagnostics: Incomplete
    def __init__(self, hass: HomeAssistant, config_entry: ConfigEntry, api: axis.AxisDevice) -> None: ...
    @property
    def host(self) -> str: ...
    @property
    def port(self) -> int: ...
    @property
    def username(self) -> str: ...
    @property
    def password(self) -> str: ...
    @property
    def model(self) -> str: ...
    @property
    def name(self) -> str: ...
    @property
    def unique_id(self) -> str | None: ...
    @property
    def option_events(self) -> bool: ...
    @property
    def option_stream_profile(self) -> str: ...
    @property
    def option_trigger_time(self) -> int: ...
    @property
    def option_video_source(self) -> str: ...
    @property
    def signal_reachable(self) -> str: ...
    @property
    def signal_new_address(self) -> str: ...
    def async_connection_status_callback(self, status: Signal) -> None: ...
    @staticmethod
    async def async_new_address_callback(hass: HomeAssistant, entry: ConfigEntry) -> None: ...
    async def async_update_device_registry(self) -> None: ...
    async def async_use_mqtt(self, hass: HomeAssistant, component: str) -> None: ...
    def mqtt_message(self, message: ReceiveMessage) -> None: ...
    def async_setup_events(self) -> None: ...
    def disconnect_from_stream(self) -> None: ...
    async def shutdown(self, event: Event) -> None: ...
    async def async_reset(self) -> bool: ...

async def get_axis_device(hass: HomeAssistant, config: MappingProxyType[str, Any]) -> axis.AxisDevice: ...
