"""Test that Ollama model is created with a generous timeout.

The default httpx timeout is too short for complex prompts (30-60s generation).
This caused socket read errors in production. The agno Ollama class uses
``timeout`` (not ``request_timeout``).
"""

import importlib
from unittest.mock import MagicMock, patch


def test_base_agent_sets_timeout():
    """BaseAgent creates Ollama with timeout=300."""
    # Ensure module is loaded before patching — prevents xdist ordering issues
    importlib.import_module("timmy.agents.base")

    with patch("timmy.agents.base.Ollama") as mock_ollama, patch("timmy.agents.base.Agent"):
        mock_ollama.return_value = MagicMock()

        # Import after patching to get the patched version
        from timmy.agents.base import BaseAgent

        class ConcreteAgent(BaseAgent):
            async def handle_message(self, message: str) -> str:
                return ""

        # Trigger Ollama construction
        try:
            ConcreteAgent(
                agent_id="test",
                name="Test",
                role="tester",
                system_prompt="You are a test agent.",
                tools=[],
            )
        except Exception:
            pass  # MCP registry may not be available

        # Verify Ollama was called with timeout
        if mock_ollama.called:
            _, kwargs = mock_ollama.call_args
            assert kwargs.get("timeout") == 300, (
                f"Expected timeout=300, got {kwargs.get('timeout')}"
            )


def test_main_agent_sets_timeout():
    """create_timmy() creates Ollama with timeout=300."""
    with (
        patch("timmy.agent.Ollama") as mock_ollama,
        patch("timmy.agent.SqliteDb"),
        patch("timmy.agent.Agent"),
        patch("timmy.agent._resolve_model_with_fallback", return_value=("llama3.2:3b", False)),
        patch("timmy.agent._check_model_available", return_value=True),
    ):
        mock_ollama.return_value = MagicMock()

        from timmy.agent import create_timmy

        try:
            create_timmy()
        except Exception:
            pass

        if mock_ollama.called:
            _, kwargs = mock_ollama.call_args
            assert kwargs.get("timeout") == 300, (
                f"Expected timeout=300, got {kwargs.get('timeout')}"
            )
