# retoor <retoor@molodetz.nl>

import json
import pytest
import requests
from tests.conftest import BASE_URL
from devplacepy.database import create_deepsearch_session, get_table, refresh_snapshot, set_setting
from devplacepy.services.jobs import queue


@pytest.fixture(scope="module", autouse=True)
def _settings(app_server):
    set_setting("rate_limit_per_minute", "1000000")
    yield


def _weasyprint_available() -> bool:
    try:
        import weasyprint

        weasyprint.HTML(string="<p>x</p>").write_pdf()
        return True
    except Exception:
        return False


def _seed_done(owner_id="ds-export-owner"):
    uid = queue.enqueue(
        "deepsearch", {"query": "q", "depth": 1, "max_pages": 5}, "user", owner_id, "DeepSearch"
    )
    create_deepsearch_session(uid, "user", owner_id, "q", 1, 5, f"ds_{uid.replace('-', '')}")
    report = {
        "query": "q",
        "summary": "A grounded summary.",
        "findings": [{"title": "F1", "detail": "d", "confidence": 0.8, "citations": [1]}],
        "sources": [{"url": "https://example.com", "title": "Example", "source": "httpx"}],
        "score": 70,
        "confidence": 0.7,
        "source_diversity": 0.5,
        "page_count": 3,
        "chunk_count": 12,
    }
    get_table("jobs").update(
        {"uid": uid, "status": queue.DONE, "result": json.dumps({"report": report})}, ["uid"]
    )
    refresh_snapshot()
    return uid


def test_export_pdf_when_ready(app_server):
    if not _weasyprint_available():
        pytest.skip("weasyprint native deps (libpango) not installed in this environment")
    uid = _seed_done()
    r = requests.get(f"{BASE_URL}/tools/deepsearch/{uid}/export.pdf")
    assert r.status_code == 200, r.text[:200]
    assert "application/pdf" in r.headers.get("content-type", "")
    assert r.content[:5] == b"%PDF-"


def test_export_pdf_not_ready_404(app_server):
    uid = queue.enqueue(
        "deepsearch", {"query": "q"}, "user", "ds-export-pending", "DeepSearch"
    )
    refresh_snapshot()
    r = requests.get(f"{BASE_URL}/tools/deepsearch/{uid}/export.pdf")
    assert r.status_code == 404


def test_export_pdf_unknown_404(app_server):
    r = requests.get(f"{BASE_URL}/tools/deepsearch/nope-uid/export.pdf")
    assert r.status_code == 404
