"""Run on the owner's trusted computer/server, never expose the node token."""

import json
import os
import time
import uuid
from urllib.request import Request, urlopen
from urllib.parse import urlsplit

origin = os.environ.get("MOBILE_GPU_ORIGIN", "http://127.0.0.1:8891").rstrip("/")
parsed = urlsplit(origin)
if parsed.scheme != "https" and origin != "http://127.0.0.1:8891":
    raise SystemExit("Use HTTPS outside the default localhost broker")
token = os.environ.get("YETI3_NODE_TOKEN")
if not token:
    raise SystemExit("Set YETI3_NODE_TOKEN on the trusted owner computer first")


def api(route, body=None):
    request = Request(
        origin + "/mobile-gpu/" + route,
        data=json.dumps(body).encode() if body is not None else None,
        headers={
            "Content-Type": "application/json",
            "Authorization": "Bearer " + token,
        },
    )
    with urlopen(request, timeout=15) as response:
        return json.load(response)


pair = api("pair", {})
print("Откройте:", origin + "/mobile-gpu/")
print("Одноразовый код (5 минут):", pair["code"], flush=True)
job = api(
    "jobs", {"request_id": str(uuid.uuid4()), "a": [1, 2.25, -7], "b": [4, 0.5, 10]}
)
for _ in range(180):
    result = api("jobs/" + job["id"])
    if result["status"] == "done":
        print("Результат WebGPU:", result["result"])
        break
    time.sleep(2)
else:
    raise SystemExit(
        "Устройство не вернуло результат за 6 минут. Задание остаётся в очереди до 24 часов."
    )
