"""Tests for PDF export via WeasyPrint."""

import pytest
from httpx import AsyncClient


@pytest.mark.asyncio
class TestPDFExport:
    """Test PDF export endpoint."""

    async def test_export_pdf_returns_pdf_content(
        self, client: AsyncClient, auth_headers: dict, test_tree: dict
    ):
        """Test that PDF export returns application/pdf content starting with %PDF."""
        # Create a session
        create_response = await client.post(
            "/api/v1/sessions",
            json={"tree_id": test_tree["id"], "ticket_number": "PDF-001"},
            headers=auth_headers,
        )
        assert create_response.status_code in (200, 201)
        session_id = create_response.json()["id"]

        # Add a decision so there's content
        await client.put(
            f"/api/v1/sessions/{session_id}",
            json={
                "decisions": [
                    {
                        "node_id": "root",
                        "question": "Is this a test?",
                        "answer": "Yes",
                        "notes": "PDF export test",
                        "timestamp": "2026-03-17T10:00:00Z",
                    }
                ]
            },
            headers=auth_headers,
        )

        # Export as PDF
        response = await client.post(
            f"/api/v1/sessions/{session_id}/export",
            json={"format": "pdf", "include_tree_info": True},
            headers=auth_headers,
        )

        assert response.status_code == 200
        assert response.headers["content-type"] == "application/pdf"
        assert "session-export-" in response.headers.get("content-disposition", "")
        # PDF files start with %PDF
        assert response.content[:5] == b"%PDF-"

    async def test_export_pdf_with_no_supporting_data(
        self, client: AsyncClient, auth_headers: dict, test_tree: dict
    ):
        """Test PDF export works when session has no supporting data."""
        create_response = await client.post(
            "/api/v1/sessions",
            json={"tree_id": test_tree["id"]},
            headers=auth_headers,
        )
        assert create_response.status_code in (200, 201)
        session_id = create_response.json()["id"]

        response = await client.post(
            f"/api/v1/sessions/{session_id}/export",
            json={"format": "pdf"},
            headers=auth_headers,
        )

        assert response.status_code == 200
        assert response.headers["content-type"] == "application/pdf"
        assert response.content[:5] == b"%PDF-"

    async def test_existing_markdown_export_still_works(
        self, client: AsyncClient, auth_headers: dict, test_tree: dict
    ):
        """Verify markdown export is unaffected by PDF addition."""
        create_response = await client.post(
            "/api/v1/sessions",
            json={"tree_id": test_tree["id"], "ticket_number": "MD-001"},
            headers=auth_headers,
        )
        assert create_response.status_code in (200, 201)
        session_id = create_response.json()["id"]

        response = await client.post(
            f"/api/v1/sessions/{session_id}/export",
            json={"format": "markdown", "include_tree_info": True},
            headers=auth_headers,
        )

        assert response.status_code == 200
        assert "text/markdown" in response.headers["content-type"]
        assert "MD-001" in response.text
