#!/usr/bin/env python3
"""Non-destructive HTTP smoke checks for Kings And Queens auth routes."""

import json
import os
import urllib.error
import urllib.request


PB_URL = os.environ.get("KQ_PB_URL", "http://127.0.0.1:8091").rstrip("/")


def request_json(method, path, payload=None):
    body = json.dumps(payload).encode("utf-8") if payload is not None else None
    request = urllib.request.Request(f"{PB_URL}{path}", data=body, method=method)
    request.add_header("Content-Type", "application/json")
    try:
        with urllib.request.urlopen(request, timeout=10) as response:
            raw = response.read().decode("utf-8")
            return response.status, json.loads(raw) if raw else {}
    except urllib.error.HTTPError as error:
        raw = error.read().decode("utf-8")
        try:
            parsed = json.loads(raw) if raw else {}
        except json.JSONDecodeError:
            parsed = {}
        return error.code, parsed


def main():
    unknown_phone = "5492910000000"

    status, payload = request_json(
        "POST",
        "/api/kq/auth/request-otp",
        {"phone": unknown_phone},
    )
    if status != 200 or payload != {"ok": True}:
        raise SystemExit("request-otp smoke check failed")

    status, _ = request_json(
        "POST",
        "/api/kq/auth/verify-otp",
        {"phone": unknown_phone, "code": "000000"},
    )
    if status not in (400, 429):
        raise SystemExit("verify-otp smoke check failed")

    status, _ = request_json("GET", "/api/kq/guardian/dashboard")
    if status not in (401, 403):
        raise SystemExit("guardian dashboard smoke check failed")

    print("auth family smoke checks ok")


if __name__ == "__main__":
    main()
