from .const import CONF_FEATURE_DEVICE_TRACKING as CONF_FEATURE_DEVICE_TRACKING, CONF_OLD_DISCOVERY as CONF_OLD_DISCOVERY, DEFAULT_CONF_FEATURE_DEVICE_TRACKING as DEFAULT_CONF_FEATURE_DEVICE_TRACKING, DEFAULT_CONF_OLD_DISCOVERY as DEFAULT_CONF_OLD_DISCOVERY, DEFAULT_HOST as DEFAULT_HOST, DEFAULT_HTTPS_PORT as DEFAULT_HTTPS_PORT, DEFAULT_HTTP_PORT as DEFAULT_HTTP_PORT, DEFAULT_SSL as DEFAULT_SSL, DOMAIN as DOMAIN, ERROR_AUTH_INVALID as ERROR_AUTH_INVALID, ERROR_CANNOT_CONNECT as ERROR_CANNOT_CONNECT, ERROR_UNKNOWN as ERROR_UNKNOWN, ERROR_UPNP_NOT_CONFIGURED as ERROR_UPNP_NOT_CONFIGURED, FRITZ_AUTH_EXCEPTIONS as FRITZ_AUTH_EXCEPTIONS
from .coordinator import FritzConfigEntry as FritzConfigEntry
from _typeshed import Incomplete
from collections.abc import Mapping
from homeassistant.components.device_tracker import CONF_CONSIDER_HOME as CONF_CONSIDER_HOME, DEFAULT_CONSIDER_HOME as DEFAULT_CONSIDER_HOME
from homeassistant.config_entries import ConfigFlow as ConfigFlow, ConfigFlowResult as ConfigFlowResult, OptionsFlowWithReload as OptionsFlowWithReload
from homeassistant.const import CONF_HOST as CONF_HOST, CONF_PASSWORD as CONF_PASSWORD, CONF_PORT as CONF_PORT, CONF_SSL as CONF_SSL, CONF_USERNAME as CONF_USERNAME
from homeassistant.core import callback as callback
from homeassistant.helpers.service_info.ssdp import ATTR_UPNP_FRIENDLY_NAME as ATTR_UPNP_FRIENDLY_NAME, ATTR_UPNP_MODEL_NAME as ATTR_UPNP_MODEL_NAME, ATTR_UPNP_UDN as ATTR_UPNP_UDN, SsdpServiceInfo as SsdpServiceInfo
from homeassistant.helpers.typing import VolDictType as VolDictType
from typing import Any, Self
from urllib.parse import ParseResult as ParseResult

_LOGGER: Incomplete

class FritzBoxToolsFlowHandler(ConfigFlow, domain=DOMAIN):
    VERSION: int
    _host: str
    @staticmethod
    @callback
    def async_get_options_flow(config_entry: FritzConfigEntry) -> FritzBoxToolsOptionsFlowHandler: ...
    _name: str
    _password: str
    _use_tls: bool
    _feature_device_discovery: bool
    _port: int | None
    _username: str
    _model: str
    def __init__(self) -> None: ...
    async def async_fritz_tools_init(self) -> str | None: ...
    def fritz_tools_init(self) -> str | None: ...
    async def async_check_configured_entry(self) -> FritzConfigEntry | None: ...
    @callback
    def _async_create_entry(self) -> ConfigFlowResult: ...
    def _determine_port(self, user_input: dict[str, Any]) -> int: ...
    async def async_step_ssdp(self, discovery_info: SsdpServiceInfo) -> ConfigFlowResult: ...
    def is_matching(self, other_flow: Self) -> bool: ...
    async def async_step_confirm(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
    def _show_setup_form_init(self, errors: dict[str, str] | None = None) -> ConfigFlowResult: ...
    def _show_setup_form_confirm(self, errors: dict[str, str] | None = None) -> ConfigFlowResult: ...
    async def async_step_user(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
    async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> ConfigFlowResult: ...
    def _show_setup_form_reauth_confirm(self, user_input: dict[str, Any], errors: dict[str, str] | None = None) -> ConfigFlowResult: ...
    async def async_step_reauth_confirm(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
    def _show_setup_form_reconfigure(self, user_input: dict[str, Any], errors: dict[str, str] | None = None) -> ConfigFlowResult: ...
    async def async_step_reconfigure(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...

class FritzBoxToolsOptionsFlowHandler(OptionsFlowWithReload):
    async def async_step_init(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
