"""
Shared fixtures for advanced search system supporting module tests.
"""

import json
from unittest.mock import Mock

import pytest


@pytest.fixture
def mock_llm():
    """Create a mock LLM for testing supporting modules."""
    mock = Mock()

    def invoke_side_effect(prompt, *args, **kwargs):
        if isinstance(prompt, list):
            prompt_text = " ".join(
                msg.content if hasattr(msg, "content") else str(msg)
                for msg in prompt
            )
        else:
            prompt_text = str(prompt)

        prompt_lower = prompt_text.lower()

        # Question generation
        if "question" in prompt_lower:
            response = Mock()
            response.content = (
                "1. What are the key aspects?\n"
                "2. How has this evolved?\n"
                "3. What are the main challenges?"
            )
            return response

        # Constraint extraction
        if "constraint" in prompt_lower:
            response = Mock()
            response.content = json.dumps(
                {
                    "constraints": [
                        {"type": "temporal", "value": "2023"},
                        {"type": "geographic", "value": "global"},
                    ]
                }
            )
            return response

        # Default
        response = Mock()
        response.content = "Mock response for testing"
        return response

    mock.invoke = Mock(side_effect=invoke_side_effect)
    return mock


@pytest.fixture
def sample_search_results():
    """Sample search results for testing."""
    return [
        {
            "title": "Test Article 1",
            "link": "https://example.com/1",
            "snippet": "This is a test snippet about the topic.",
        },
        {
            "title": "Test Article 2",
            "link": "https://example.com/2",
            "snippet": "Another test snippet with different content.",
        },
    ]


@pytest.fixture
def sample_query():
    """Sample research query."""
    return "What are the environmental impacts of electric vehicles?"
