from dataclasses import dataclass, field from threading import Lock from typing import Dict, List @dataclass class AppState: ap_mode: bool = False wifi_connected: bool = False internet_available: bool = False connecting: bool = False status_message: str = "Startup" last_error: str = "" known_ssids: List[str] = field(default_factory=list) ap_grace_until: float = 0.0 lock: Lock = field(default_factory=Lock, repr=False) def update_status(self, message: str, error: str = "") -> None: with self.lock: self.status_message = message self.last_error = error def set_known_ssids(self, ssids: List[str]) -> None: with self.lock: self.known_ssids = ssids def snapshot(self) -> Dict[str, object]: with self.lock: return { "ap_mode": self.ap_mode, "wifi_connected": self.wifi_connected, "internet_available": self.internet_available, "connecting": self.connecting, "status_message": self.status_message, "last_error": self.last_error, "known_ssids": list(self.known_ssids), }