"""
Fixtures for content_fetcher tests.
"""

import pytest
from unittest.mock import MagicMock, patch


@pytest.fixture
def mock_html_response():
    """Mock HTML response for testing."""
    return """
    <!DOCTYPE html>
    <html>
    <head>
        <title>Test Article Title</title>
        <meta name="description" content="This is a test article description.">
        <meta name="author" content="Test Author">
    </head>
    <body>
        <nav>Navigation menu to be removed</nav>
        <article>
            <h1>Main Article Heading</h1>
            <p>This is the first paragraph of the article content. It contains important information about the topic being discussed.</p>
            <p>This is the second paragraph with more details about the subject matter.</p>
            <h2>Subheading</h2>
            <p>Additional content under the subheading explaining more concepts.</p>
        </article>
        <footer>Footer content to be removed</footer>
    </body>
    </html>
    """


@pytest.fixture
def mock_arxiv_html():
    """Mock arXiv abstract page."""
    return """
    <!DOCTYPE html>
    <html>
    <head>
        <title>[2301.12345] Attention Is All You Need</title>
    </head>
    <body>
        <div id="abs">
            <h1>Attention Is All You Need</h1>
            <div class="authors">Vaswani et al.</div>
            <blockquote class="abstract">
                The dominant sequence transduction models are based on complex recurrent or
                convolutional neural networks. We propose a new simple network architecture,
                the Transformer, based solely on attention mechanisms.
            </blockquote>
        </div>
    </body>
    </html>
    """


@pytest.fixture
def mock_session():
    """Mock requests session."""
    mock = MagicMock()
    mock.headers = {}
    return mock


@pytest.fixture
def mock_successful_response(mock_html_response):
    """Mock successful HTTP response."""
    response = MagicMock()
    response.status_code = 200
    response.text = mock_html_response
    response.content = mock_html_response.encode("utf-8")
    response.headers = {"content-type": "text/html; charset=utf-8"}
    return response


@pytest.fixture
def mock_pdf_response():
    """Mock PDF response (minimal valid PDF)."""
    # Minimal PDF content
    pdf_content = b"%PDF-1.4\n1 0 obj\n<<>>\nendobj\ntrailer\n<<>>\n%%EOF"
    response = MagicMock()
    response.status_code = 200
    response.content = pdf_content
    response.headers = {"content-type": "application/pdf"}
    return response


@pytest.fixture
def mock_rate_tracker():
    """Mock rate tracker."""
    with patch(
        "local_deep_research.research_library.downloaders.html.AdaptiveRateLimitTracker"
    ) as mock:
        tracker = MagicMock()
        tracker.apply_rate_limit.return_value = 0
        mock.return_value = tracker
        yield tracker
