"""Start or stop the live screen-share broadcast (Go-Live) on request.

The brain cannot drive the Discord broadcast itself — the bot owns it. This
tool records a directive ("start"/"stop") in the per-turn state; the bridge
returns it to the bot, which performs the actual start/stop. Only meaningful in
screen-share mode (``STREAM_BROWSER`` true); when broadcasting is disabled the
tool refuses so the user is told it cannot be turned on.
"""

from __future__ import annotations

from typing import Dict, Any, Optional

from ..base import Tool, ToolContext
from ..types import ToolExecutionResult
from ...debug import debug_log


class SetBroadcastTool(Tool):
    """Turn the live screen-share broadcast on or off."""

    @property
    def name(self) -> str:
        return "setBroadcast"

    @property
    def description(self) -> str:
        return (
            "Control the live screen-share broadcast (Go-Live). You MUST call this "
            "tool — do not just reply in words — whenever the user asks to turn the "
            "broadcast or screen ON or OFF: start/begin/turn on/show your screen/go "
            "live -> action='start'; stop/end/turn off/hide your screen/stop "
            "streaming -> action='stop'. Saying you did it without calling this tool "
            "does nothing. Only available in screen-share mode."
        )

    @property
    def inputSchema(self) -> Dict[str, Any]:
        return {
            "type": "object",
            "properties": {
                "action": {
                    "type": "string",
                    "enum": ["start", "stop"],
                    "description": "'start' to begin the broadcast, 'stop' to end it.",
                }
            },
            "required": ["action"],
        }

    def run(self, args: Optional[Dict[str, Any]], context: ToolContext) -> ToolExecutionResult:
        cfg = context.cfg
        if not getattr(cfg, "stream_browser", True):
            # Broadcast capability is disabled (STREAM_BROWSER=false): refuse so
            # the user is clearly told it can't be turned on in this mode.
            return ToolExecutionResult(
                success=False,
                reply_text="방송(화면 공유) 기능이 꺼져 있어 켤 수 없습니다 (STREAM_BROWSER=false).",
            )

        action = ""
        if args and isinstance(args, dict):
            action = str(args.get("action", "")).strip().lower()
        if action not in ("start", "stop"):
            return ToolExecutionResult(
                success=False,
                reply_text="Specify action='start' or action='stop'.",
            )

        # Record the directive for the bridge to return to the bot.
        from ...reply.turn_state import request_broadcast
        request_broadcast(action)
        debug_log(f"    📡 setBroadcast requested: {action}", "stream")
        return ToolExecutionResult(
            success=True,
            reply_text="방송을 시작합니다." if action == "start" else "방송을 종료합니다.",
        )
