# Python 3.10+; standard library only, no pip install.
# Save as quickstart-request.py; run: python3 quickstart-request.py
import json
import math
import os
import sys
from pathlib import Path
from urllib.error import HTTPError
from urllib.request import Request, urlopen


def inspect_response(data):
    answer = data.get("answers", {}).get("urgency", {})
    value = answer.get("noul")
    if (answer.get("type") != "noul" or type(value) not in (int, float)
            or not math.isfinite(value) or not 0 <= value <= 1):
        raise ValueError("urgency must be a noul number in [0, 1]")
    if not isinstance(data.get("model"), str) or not data["model"].strip():
        raise ValueError("missing model version")
    usage = data.get("usage", {})
    if any(type(usage.get(k)) is not int or usage[k] < 0
           for k in ("input_tokens", "output_tokens")):
        raise ValueError("invalid token usage")
    # Teaching thresholds only; validate on labelled examples before use.
    queue = ("priority-human-review" if value >= 0.8 else "normal-queue"
             if value <= 0.2 else "undecided-human-review")
    return dict(model=data["model"], urgency=value, usage=usage, queue=queue)


def main():
    key = os.environ.get("TYPESAFE_API_KEY")
    if not key:
        raise ValueError("Set TYPESAFE_API_KEY first")
    folder = Path("jev-first-decision")
    folder.mkdir(exist_ok=True)
    request = {
        "model": "jev-latest",
        "state": "I was charged twice. Please fix this today.",
        "questions": {"urgency": {
            "type": "noul", "instructions": "Does this message express urgency?"
        }},
    }
    payload = json.dumps(request)
    (folder / "request.json").write_text(payload, encoding="utf-8")
    for name in ("response.json", "response.status"):
        (folder / name).unlink(missing_ok=True)
    req = Request("https://api.typesafe.ai/v1/systemone", payload.encode(), {
        "Authorization": f"Bearer {key}", "Content-Type": "application/json"
    })
    try:
        with urlopen(req, timeout=30) as response:
            status, body = response.status, response.read()
    except HTTPError as error:
        status, body = error.code, error.read()
    (folder / "response.json").write_bytes(body)
    (folder / "response.status").write_text(str(status), encoding="utf-8")
    if not 200 <= status < 300:
        raise ValueError(f"HTTP {status}; inspect response.json before retrying")
    print(json.dumps(inspect_response(json.loads(body)), indent=2))


if __name__ == "__main__":
    try:
        main()
    except Exception as error:
        print(f"Unfinished: {error}", file=sys.stderr)
        sys.exit(1)
