from .config_flow import get_entry_client as get_entry_client
from .const import DOMAIN as DOMAIN, EVENT_TURN_ON as EVENT_TURN_ON, SIGNAL_CLIENT_DATA as SIGNAL_CLIENT_DATA, SIGNAL_CLIENT_STARTED as SIGNAL_CLIENT_STARTED, SIGNAL_CLIENT_STOPPED as SIGNAL_CLIENT_STOPPED
from _typeshed import Incomplete
from arcam.fmj.state import State
from collections.abc import Callable as Callable, Coroutine
from homeassistant.components.media_player import BrowseMedia as BrowseMedia, MediaClass as MediaClass, MediaPlayerEntity as MediaPlayerEntity, MediaPlayerEntityFeature as MediaPlayerEntityFeature, MediaPlayerState as MediaPlayerState, MediaType as MediaType
from homeassistant.components.media_player.errors import BrowseError as BrowseError
from homeassistant.config_entries import ConfigEntry as ConfigEntry
from homeassistant.const import ATTR_ENTITY_ID as ATTR_ENTITY_ID
from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
from homeassistant.exceptions import HomeAssistantError as HomeAssistantError
from homeassistant.helpers.device_registry import DeviceInfo as DeviceInfo
from homeassistant.helpers.dispatcher import async_dispatcher_connect as async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddEntitiesCallback as AddEntitiesCallback
from typing import Any, ParamSpec, TypeVar

_R = TypeVar('_R')
_P = ParamSpec('_P')
_LOGGER: Incomplete

async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry, async_add_entities: AddEntitiesCallback) -> None: ...
def convert_exception(func: Callable[_P, Coroutine[Any, Any, _R]]) -> Callable[_P, Coroutine[Any, Any, _R]]: ...

class ArcamFmj(MediaPlayerEntity):
    _attr_should_poll: bool
    _attr_has_entity_name: bool
    _state: Incomplete
    _attr_name: Incomplete
    _attr_supported_features: Incomplete
    _attr_unique_id: Incomplete
    _attr_entity_registry_enabled_default: Incomplete
    _attr_device_info: Incomplete
    def __init__(self, device_name: str, state: State, uuid: str) -> None: ...
    @property
    def state(self) -> MediaPlayerState: ...
    async def async_added_to_hass(self) -> None: ...
    async def async_update(self) -> None: ...
    async def async_mute_volume(self, mute: bool) -> None: ...
    async def async_select_source(self, source: str) -> None: ...
    async def async_select_sound_mode(self, sound_mode: str) -> None: ...
    async def async_set_volume_level(self, volume: float) -> None: ...
    async def async_volume_up(self) -> None: ...
    async def async_volume_down(self) -> None: ...
    async def async_turn_on(self) -> None: ...
    async def async_turn_off(self) -> None: ...
    async def async_browse_media(self, media_content_type: MediaType | str | None = None, media_content_id: str | None = None) -> BrowseMedia: ...
    async def async_play_media(self, media_type: MediaType | str, media_id: str, **kwargs: Any) -> None: ...
    @property
    def source(self) -> str | None: ...
    @property
    def source_list(self) -> list[str]: ...
    @property
    def sound_mode(self) -> str | None: ...
    @property
    def sound_mode_list(self) -> list[str] | None: ...
    @property
    def is_volume_muted(self) -> bool | None: ...
    @property
    def volume_level(self) -> float | None: ...
    @property
    def media_content_type(self) -> MediaType | None: ...
    @property
    def media_content_id(self) -> str | None: ...
    @property
    def media_channel(self) -> str | None: ...
    @property
    def media_artist(self) -> str | None: ...
    @property
    def media_title(self) -> str | None: ...
