from pathlib import Path
import datetime
import json
import os
import time
import urllib.request

ROOT = Path(__file__).resolve().parents[1]
intent = json.loads((ROOT / "log/footage-intent.json").read_text())
base_url = intent["base_url"]
jobs_path = intent["jobs_path"]
job_id = intent["job_id"]
url = f"{base_url}{jobs_path}/{job_id}"


def atomic(path, value):
    temporary = Path(str(path) + ".tmp")
    temporary.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n")
    os.replace(temporary, path)


while True:
    with urllib.request.urlopen(url, timeout=20) as response:
        job = json.loads(response.read())
    if (job.get("job_id") or job.get("id")) != job_id:
        raise RuntimeError("Pinned footage job ID mismatch")
    status = job.get("status")
    atomic(ROOT / "log/footage-watch.json", {
        "base_url": base_url,
        "job_id": job_id,
        "status": status,
        "checked_at": datetime.datetime.now(datetime.timezone.utc).isoformat(),
    })
    if status in {"completed", "failed", "cancelled"}:
        terminal = {
            "base_url": base_url,
            "job_id": job_id,
            "received_at": datetime.datetime.now(datetime.timezone.utc).isoformat(),
            "response": job,
        }
        atomic(ROOT / "log/footage-terminal-response.json", terminal)
        print(json.dumps(terminal, ensure_ascii=False))
        if status != "completed":
            raise SystemExit(2)
        break
    time.sleep(30)
