""" modules/airplane_mode.py — Phase 4: Airplane mode toggle (Windows). Windows does not provide a stable public CLI toggle for Airplane Mode. Best-effort approach: - Try to set SystemRadioState registry value (requires admin) and report status. """ from __future__ import annotations import subprocess from dataclasses import dataclass @dataclass(frozen=True, slots=True) class AirResult: ok: bool message: str def _ps(cmd: str) -> subprocess.CompletedProcess[str]: return subprocess.run( ["powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", cmd], capture_output=True, text=True, shell=False, ) def set_airplane(enabled: bool) -> AirResult: val = 0 if enabled else 1 r = _ps( "try { " "Set-ItemProperty -Path 'HKLM:\\\\System\\\\CurrentControlSet\\\\Control\\\\RadioManagement' " f"-Name 'SystemRadioState' -Value {val} -ErrorAction Stop; " "'OK' } catch { 'FAIL:' + $_.Exception.Message }" ) out = (r.stdout or "").strip() if out == "OK": return AirResult(True, f"Airplane mode {'ON' if enabled else 'OFF'} (radio state updated).") msg = (out or r.stderr or "").strip() if "access is denied" in msg.lower(): return AirResult(False, "Airplane mode toggle needs admin permission.") return AirResult(False, f"Airplane mode toggle failed: {msg[:160]}")