"""Handles "show the admin canvas" requests on this thin client.

Sibling of digest_canvas.py (docs/project-plan.md Phase 13), for the sys-admin-llm's
on-demand display surface instead of digest-engine's scheduled one. This module is
deliberately even simpler than DigestCanvas: there is no detail level, no person, no
presence resolution of any kind for it to get wrong — the MQTT payload that triggers
`show()` is never even inspected. Every call opens the exact same fixed,
locally-configured URL; whatever is currently on that page is entirely admin-canvas's
concern (see admin-canvas/README.md), never this agent's.

SECURITY BOUNDARY, same invariant as digest_canvas.py's: this module never accepts a
URL, path, or any other value from its own inbound payload. ADMIN_WEB_URL is a local
config value set at image-build/deploy time, not something MQTT can influence.
"""

from __future__ import annotations

import logging

from .sway_control import WS_ADMIN, SwayControl

log = logging.getLogger(__name__)

BROWSER_COMMAND = "/usr/local/bin/admin-browser"


class AdminCanvas:
    def __init__(self, sway: SwayControl, admin_web_url: str):
        self.sway = sway
        self.admin_web_url = (admin_web_url or "").rstrip("/")

    def show(self) -> None:
        if not self.admin_web_url:
            log.error("ADMIN_WEB_URL is not configured; cannot show the admin canvas")
            return

        url = f"{self.admin_web_url}/canvas.html"
        log.info("showing admin canvas")
        self.sway.switch_workspace(WS_ADMIN)
        self.sway.open_url(url, browser_command=BROWSER_COMMAND)
