"""Verify enquiry -> quotation -> PDF flow against the configured API."""
from __future__ import annotations

import json
import sys
from pathlib import Path

import httpx

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))

from app.config import get_settings  # noqa: E402

settings = get_settings()
BASE = "https://selfiepetti.naviyra.uk/api/v1"


def main() -> int:
    with httpx.Client(base_url=BASE, timeout=60.0) as client:
        login = client.post(
            "/auth/login",
            json={"email": settings.seed_user_email, "password": settings.seed_user_password},
        )
        print("login", login.status_code)
        if login.status_code != 200:
            print(login.text)
            return 1

        token = login.json()["access_token"]
        headers = {"Authorization": f"Bearer {token}"}

        enquiries = client.get("/enquiries", headers=headers)
        print("enquiries", enquiries.status_code)
        if enquiries.status_code != 200:
            print(enquiries.text)
            return 1

        rows = enquiries.json()
        target = None
        for row in rows:
            products = row.get("products") or []
            if products:
                target = row
                break

        if target is None:
            print("No enquiry with products found; create one in the app first.")
            return 1

        enquiry_id = target["id"]
        print(f"using enquiry {target.get('public_id')} id={enquiry_id} products={len(target.get('products') or [])}")

        create = client.post(
            f"/enquiries/{enquiry_id}/quotation",
            headers=headers,
            json={"transport_amount": 0, "discount": 0, "status": "Sent"},
        )
        print("create quotation", create.status_code)
        if create.status_code != 200:
            print(create.text)
            return 1

        quotation = create.json()
        quotation_id = quotation["id"]
        print(f"quotation id={quotation_id} public_id={quotation.get('public_id')}")

        pdf = client.get(f"/quotations/{quotation_id}/pdf", headers=headers)
        print("pdf", pdf.status_code, "content-type", pdf.headers.get("content-type"), "bytes", len(pdf.content))
        if pdf.status_code != 200:
            try:
                print(json.dumps(pdf.json(), indent=2))
            except Exception:
                print(pdf.text[:500])
            return 1

        if not pdf.content.startswith(b"%PDF"):
            print("Response is not a PDF")
            print(pdf.text[:500])
            return 1

        print("OK: quotation PDF generated successfully")
        return 0


if __name__ == "__main__":
    raise SystemExit(main())
