"""Base MQTT handler interface.""" from abc import ABC, abstractmethod from typing import Dict, Callable, List, Optional, Any class BaseMQTTHandler(ABC): """Abstract base class for MQTT handlers.""" @abstractmethod def start(self) -> None: """Start the MQTT handler.""" pass @abstractmethod def stop(self) -> None: """Stop the MQTT handler.""" pass @abstractmethod def update_state(self, is_running: Optional[bool] = None, current_file: Optional[str] = None, patterns: Optional[List[str]] = None, serial: Optional[str] = None, playlist: Optional[Dict[str, Any]] = None) -> None: """Update the state of the sand table and publish to MQTT. Args: is_running: Whether the table is currently running a pattern current_file: The currently playing file patterns: List of available pattern files serial: Serial connection status playlist: Current playlist information if in playlist mode """ pass @property @abstractmethod def is_enabled(self) -> bool: """Return whether MQTT functionality is enabled.""" pass