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

ROOT = Path(__file__).resolve().parents[1]
submit = json.loads((ROOT / "log/footage-submit.json").read_text())
base = submit["base_url"]
job_id = submit["job_id"]
path = submit["jobs_path"] + "/" + job_id
checkpoint = ROOT / "log/footage-terminal-response.json"

while True:
    with urllib.request.urlopen(base + path, timeout=30) as response:
        value = json.loads(response.read())
    returned = value.get("id") or value.get("job_id") or (value.get("job") or {}).get("id")
    if returned and returned != job_id:
        raise RuntimeError("Pinned footage job ID mismatch")
    status = (value.get("status") or (value.get("job") or {}).get("status") or "").lower()
    record = {
        "base_url": base,
        "job_id": job_id,
        "status": status,
        "response": value,
        "checked_at": datetime.datetime.now(datetime.timezone.utc).isoformat(),
    }
    temporary = Path(str(checkpoint) + ".tmp")
    temporary.write_text(json.dumps(record, ensure_ascii=False, indent=2) + "\n")
    os.replace(temporary, checkpoint)
    if status == "completed":
        verification = value.get("verification") or (value.get("job") or {}).get("verification") or {}
        if verification.get("verified") is not True:
            raise RuntimeError("Footage completed without verified endpoint receipt")
        print(json.dumps({"status": status, "job_id": job_id, "verification": verification}, ensure_ascii=False))
        break
    if status in {"failed", "cancelled"}:
        raise RuntimeError("Footage job terminal failure: " + status)
    time.sleep(20)
