"""
Stripe billing for QA Copilot (Roadmap 5.4).

Creates Stripe Checkout sessions via HTTP API (no SDK dependency).
Returns 503 when QA_STRIPE_SECRET_KEY is not configured.
"""
from __future__ import annotations

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

_secret_key = os.environ.get("QA_STRIPE_SECRET_KEY", "")
STRIPE_API_URL = "https://api.stripe.com/v1"


def is_configured() -> bool:
    return bool(_secret_key)


def create_checkout_session(
    price_id: str,
    customer_email: str,
    success_url: str,
    cancel_url: str,
) -> dict:
    """Create a Stripe Checkout session. Returns {"url": "https://checkout.stripe.com/..."}.
    Raises if Stripe is not configured or the API call fails."""
    if not _secret_key:
        raise RuntimeError("Stripe not configured (QA_STRIPE_SECRET_KEY not set)")
    data = urllib.parse.urlencode({
        "mode": "subscription",
        "line_items[0][price]": price_id,
        "line_items[0][quantity]": "1",
        "customer_email": customer_email,
        "success_url": success_url,
        "cancel_url": cancel_url,
    }).encode()
    req = urllib.request.Request(
        f"{STRIPE_API_URL}/checkout/sessions",
        data=data,
        headers={"Authorization": f"Bearer {_secret_key}"},
        method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=15) as resp:
            result = json.loads(resp.read())
        return {"url": result.get("url", ""), "session_id": result.get("id", "")}
    except urllib.error.HTTPError as e:
        body = e.read().decode("utf-8", errors="replace")
        raise RuntimeError(f"Stripe error {e.code}: {body[:200]}")
    except urllib.error.URLError as e:
        raise RuntimeError(f"Stripe unreachable: {e}")
