from .const import CHARGER_CURRENCY_KEY as CHARGER_CURRENCY_KEY, CHARGER_DATA_KEY as CHARGER_DATA_KEY, CHARGER_DATA_POST_L1_KEY as CHARGER_DATA_POST_L1_KEY, CHARGER_DATA_POST_L2_KEY as CHARGER_DATA_POST_L2_KEY, CHARGER_ECO_SMART_KEY as CHARGER_ECO_SMART_KEY, CHARGER_ECO_SMART_MODE_KEY as CHARGER_ECO_SMART_MODE_KEY, CHARGER_ECO_SMART_STATUS_KEY as CHARGER_ECO_SMART_STATUS_KEY, CHARGER_ENERGY_PRICE_KEY as CHARGER_ENERGY_PRICE_KEY, CHARGER_FEATURES_KEY as CHARGER_FEATURES_KEY, CHARGER_JWT_REFRESH_TOKEN as CHARGER_JWT_REFRESH_TOKEN, CHARGER_JWT_REFRESH_TTL as CHARGER_JWT_REFRESH_TTL, CHARGER_JWT_TOKEN as CHARGER_JWT_TOKEN, CHARGER_JWT_TTL as CHARGER_JWT_TTL, CHARGER_LOCKED_UNLOCKED_KEY as CHARGER_LOCKED_UNLOCKED_KEY, CHARGER_MAX_CHARGING_CURRENT_KEY as CHARGER_MAX_CHARGING_CURRENT_KEY, CHARGER_MAX_CHARGING_CURRENT_POST_KEY as CHARGER_MAX_CHARGING_CURRENT_POST_KEY, CHARGER_MAX_ICP_CURRENT_KEY as CHARGER_MAX_ICP_CURRENT_KEY, CHARGER_PLAN_KEY as CHARGER_PLAN_KEY, CHARGER_POWER_BOOST_KEY as CHARGER_POWER_BOOST_KEY, CHARGER_STATUS_DESCRIPTION_KEY as CHARGER_STATUS_DESCRIPTION_KEY, CHARGER_STATUS_ID_KEY as CHARGER_STATUS_ID_KEY, CODE_KEY as CODE_KEY, CONF_STATION as CONF_STATION, ChargerStatus as ChargerStatus, DOMAIN as DOMAIN, EcoSmartMode as EcoSmartMode, UPDATE_INTERVAL as UPDATE_INTERVAL
from _typeshed import Incomplete
from collections.abc import Callable as Callable
from homeassistant.config_entries import ConfigEntry as ConfigEntry
from homeassistant.core import HomeAssistant as HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed as ConfigEntryAuthFailed, HomeAssistantError as HomeAssistantError
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator as DataUpdateCoordinator, UpdateFailed as UpdateFailed
from typing import Any, Concatenate
from wallbox import Wallbox as Wallbox

_LOGGER: Incomplete
CHARGER_STATUS: dict[int, ChargerStatus]
type WallboxConfigEntry = ConfigEntry[WallboxCoordinator]

def _require_authentication[_WallboxCoordinatorT: WallboxCoordinator, **_P](func: Callable[Concatenate[_WallboxCoordinatorT, _P], Any]) -> Callable[Concatenate[_WallboxCoordinatorT, _P], Any]: ...
def check_token_validity(jwt_token_ttl: int, jwt_token_drift: int) -> bool: ...
def _validate(wallbox: Wallbox) -> None: ...
async def async_validate_input(hass: HomeAssistant, wallbox: Wallbox) -> None: ...

class WallboxCoordinator(DataUpdateCoordinator[dict[str, Any]]):
    config_entry: WallboxConfigEntry
    _station: Incomplete
    _wallbox: Incomplete
    def __init__(self, hass: HomeAssistant, config_entry: WallboxConfigEntry, wallbox: Wallbox) -> None: ...
    def _authenticate(self) -> dict[str, str]: ...
    async def async_authenticate(self) -> None: ...
    def _get_data(self) -> dict[str, Any]: ...
    update_interval: Incomplete
    @_require_authentication
    async def _async_update_data(self) -> dict[str, Any]: ...
    def _set_charging_current(self, charging_current: float) -> dict[str, dict[str, dict[str, Any]]]: ...
    @_require_authentication
    async def async_set_charging_current(self, charging_current: float) -> None: ...
    def _set_icp_current(self, icp_current: float) -> dict[str, Any]: ...
    @_require_authentication
    async def async_set_icp_current(self, icp_current: float) -> None: ...
    def _set_energy_cost(self, energy_cost: float) -> dict[str, Any]: ...
    @_require_authentication
    async def async_set_energy_cost(self, energy_cost: float) -> None: ...
    def _set_lock_unlock(self, lock: bool) -> dict[str, dict[str, dict[str, Any]]]: ...
    @_require_authentication
    async def async_set_lock_unlock(self, lock: bool) -> None: ...
    def _pause_charger(self, pause: bool) -> None: ...
    @_require_authentication
    async def async_pause_charger(self, pause: bool) -> None: ...
    def _set_eco_smart(self, option: str) -> None: ...
    @_require_authentication
    async def async_set_eco_smart(self, option: str) -> None: ...

class InvalidAuth(HomeAssistantError): ...

class InsufficientRights(HomeAssistantError):
    hass: Incomplete
    def __init__(self, *args: object, translation_domain: str | None = None, translation_key: str | None = None, translation_placeholders: dict[str, str] | None = None, hass: HomeAssistant) -> None: ...
    def _create_insufficient_rights_issue(self) -> None: ...
