"""Encola el grafo actual de ComfyUI desde la UI (equivale a pulsar "Queue Prompt").

Llama `app.queuePrompt(0)` en la pestana de ComfyUI abierta en el navegador, que
serializa el grafo visual al API format y hace POST /prompt al server. Compone
cdp_eval.

Funcion impura: hace red (CDP WebSocket) y dispara trabajo de GPU en el server.
"""
import json

try:  # ejecucion directa del archivo / fn run (browser/ en sys.path[0])
    from cdp_eval import cdp_eval
except ImportError:  # importado como paquete (sys.path = python/functions)
    from browser.cdp_eval import cdp_eval


def comfyui_queue_prompt_ui(
    *,
    port: int = 9222,
    server_url_substr: str = "8188",
    timeout_s: float = 20.0,
) -> dict:
    """Encola el grafo actual de la UI de ComfyUI.

    Args:
        port: puerto de remote debugging del Chrome diario. Default 9222.
        server_url_substr: substring de la URL de la pestana de ComfyUI.
        timeout_s: timeout de la conexion CDP en segundos.

    Returns:
        dict {ok: bool, queued: bool, error: str}. queued True si
        app.queuePrompt resolvio sin excepcion.
    """
    expr = (
        "(async function(){"
        "  if(!window.app || typeof app.queuePrompt!=='function'){"
        "    return {queued:false, error:'window.app.queuePrompt no disponible en la pestana'};"
        "  }"
        "  try{ await app.queuePrompt(0); return {queued:true, error:''}; }"
        "  catch(e){ return {queued:false, error:String(e)}; }"
        "})()"
    )
    r = cdp_eval(
        expr,
        port=port,
        target_url_substr=server_url_substr,
        await_promise=True,
        timeout_s=timeout_s,
    )
    if not r["ok"]:
        return {"ok": False, "queued": False, "error": r["error"]}
    val = r["value"] or {}
    return {
        "ok": bool(val.get("queued")),
        "queued": bool(val.get("queued")),
        "error": val.get("error", ""),
    }


if __name__ == "__main__":
    print(json.dumps(comfyui_queue_prompt_ui(), ensure_ascii=False, indent=2))
