"""命令准入审批工作流。"""

from typing import Any

import inngest

from butler.config import settings
from butler.session.wrapper import TmuxWrapper
from butler.workflows import inngest_client

tmux = TmuxWrapper(session_prefix=settings.session_prefix)


@inngest_client.create_function(
    fn_id="command-guardrail",
    name="Command Guardrail",
    trigger=inngest.TriggerEvent(event="im/command-needs-approval"),
)
async def command_guardrail(ctx: inngest.Context, step: inngest.Step) -> dict[str, Any]:
    """危险命令审批流程。"""
    user_id = ctx.event.data.get("user_id", "")
    command = ctx.event.data.get("command", "")
    session_name = ctx.event.data.get("session_name", "")

    # 类型检查
    if not isinstance(user_id, str):
        user_id = str(user_id)
    if not isinstance(command, str):
        command = str(command)
    if not isinstance(session_name, str):
        session_name = str(session_name)

    try:
        approval = await step.wait_for_event(
            "wait-approval",
            event="im/approval-response",
            timeout=settings.guardrail_approval_timeout,
        )

        if approval and approval.data.get("approved"):
            async def execute() -> None:
                tmux.send_keys(session_name, command, enter=True)

            await step.run("execute-approved", execute)

            async def capture() -> str:
                return tmux.capture_pane(session_name)

            output = await step.run("capture-output", capture)
            return {"status": "approved", "executed": True, "output": output[-1000:]}
        else:
            return {"status": "rejected", "executed": False}

    except TimeoutError:
        return {"status": "timeout", "executed": False, "message": "审批超时，命令已取消"}
