from typing import Dict, List, Literal, Tuple, overload

from redis import Redis

DeviceInitialized = Literal[
    "ring_initialized", "wled_initialized", "strip_initialized", "screen_initialized"
]

connection: Redis

def start() -> None: ...

class Event:
    def __init__(self, name: str) -> None: ...
    def wait(self) -> None: ...
    def set(self) -> None: ...
    def clear(self) -> None: ...

@overload
def get(key: Literal["playing"]) -> bool: ...
@overload
def get(key: Literal["playback_error"]) -> bool: ...
@overload
def get(key: Literal["stop_playback_loop"]) -> bool: ...
@overload
def get(key: Literal["alarm_playing"]) -> bool: ...
@overload
def get(key: Literal["alarm_requested"]) -> bool: ...
@overload
def get(key: Literal["backup_playing"]) -> bool: ...
@overload
def get(key: Literal["lights_active"]) -> bool: ...
@overload
def get(key: Literal["ring_initialized"]) -> bool: ...
@overload
def get(key: Literal["wled_initialized"]) -> bool: ...
@overload
def get(key: Literal["strip_initialized"]) -> bool: ...
@overload
def get(key: Literal["screen_initialized"]) -> bool: ...
@overload
def get(key: Literal["led_programs"]) -> List[str]: ...
@overload
def get(key: Literal["screen_programs"]) -> List[str]: ...
@overload
def get(key: Literal["resolutions"]) -> List[Tuple[int, int]]: ...
@overload
def get(key: Literal["current_resolution"]) -> Tuple[int, int]: ...
@overload
def get(key: Literal["current_fps"]) -> float: ...
@overload
def get(key: Literal["has_internet"]) -> bool: ...
@overload
def get(key: Literal["youtube_available"]) -> bool: ...
@overload
def get(key: Literal["spotify_available"]) -> bool: ...
@overload
def get(key: Literal["soundcloud_available"]) -> bool: ...
@overload
def get(key: Literal["jamendo_available"]) -> bool: ...
@overload
def get(key: Literal["library_scan_progress"]) -> str: ...
@overload
def get(key: Literal["bluetoothctl_active"]) -> bool: ...
@overload
def get(key: Literal["bluetooth_devices"]) -> List[Dict[str, str]]: ...
@overload
def get(key: Literal["active_requests"]) -> int: ...
@overload
def get(key: Literal["last_user_count_update"]) -> float: ...
@overload
def get(key: Literal["last_requests"]) -> Dict[str, float]: ...
@overload
def put(key: Literal["playing"], value: bool) -> None: ...
@overload
def put(key: Literal["playback_error"], value: bool) -> None: ...
@overload
def put(key: Literal["stop_playback_loop"], value: bool) -> None: ...
@overload
def put(key: Literal["alarm_playing"], value: bool) -> None: ...
@overload
def put(key: Literal["alarm_requested"], value: bool) -> None: ...
@overload
def put(key: Literal["backup_playing"], value: bool) -> None: ...
@overload
def put(key: Literal["lights_active"], value: bool) -> None: ...
@overload
def put(key: Literal["ring_initialized"], value: bool) -> None: ...
@overload
def put(key: Literal["wled_initialized"], value: bool) -> None: ...
@overload
def put(key: Literal["strip_initialized"], value: bool) -> None: ...
@overload
def put(key: Literal["screen_initialized"], value: bool) -> None: ...
@overload
def put(key: Literal["led_programs"], value: List[str]) -> None: ...
@overload
def put(key: Literal["screen_programs"], value: List[str]) -> None: ...
@overload
def put(key: Literal["resolutions"], value: List[Tuple[int, int]]) -> None: ...
@overload
def put(key: Literal["current_resolution"], value: Tuple[int, int]) -> None: ...
@overload
def put(key: Literal["current_fps"], value: float) -> None: ...
@overload
def put(key: Literal["has_internet"], value: bool) -> None: ...
@overload
def put(key: Literal["youtube_available"], value: bool) -> None: ...
@overload
def put(key: Literal["spotify_available"], value: bool) -> None: ...
@overload
def put(key: Literal["soundcloud_available"], value: bool) -> None: ...
@overload
def put(key: Literal["jamendo_available"], value: bool) -> None: ...
@overload
def put(key: Literal["library_scan_progress"], value: str) -> None: ...
@overload
def put(key: Literal["bluetoothctl_active"], value: bool) -> None: ...
@overload
def put(key: Literal["bluetooth_devices"], value: List[Dict[str, str]]) -> None: ...
@overload
def put(key: Literal["active_requests"], value: int) -> None: ...
@overload
def put(key: Literal["last_user_count_update"], value: float) -> None: ...
@overload
def put(key: Literal["last_requests"], value: Dict[str, float]) -> None: ...
