"""Fixtures for session package tests."""

from unittest.mock import Mock

import pytest

from core.models import RequestContext
from session.archive_store import SessionArchiveStore
from session.compressor import SessionCompressor


@pytest.fixture
def mock_context():
    """Mock RequestContext for testing."""
    return RequestContext(
        account_id="test_account",
        user_id="test_user",
        agent_id="test_agent",
        session_id="test_session",
        trace_id="test_trace",
    )


@pytest.fixture
def mock_fs():
    """Mock ContextFS for testing."""
    fs = Mock()
    fs.write_node = Mock()
    fs.read_node = Mock()
    fs.exists = Mock(return_value=True)
    fs.list_children = Mock(return_value=[])
    fs.delete_node = Mock()
    fs.move_node = Mock()
    return fs


@pytest.fixture
def mock_llm():
    """Mock LLM for testing."""
    llm = Mock()
    llm.complete_json = Mock(
        return_value={
            "overview": "Test session overview",
            "abstract": "Test abstract",
        }
    )
    return llm


@pytest.fixture
def sample_messages():
    """Sample conversation messages for testing."""
    return [
        {"role": "user", "content": "Hello, how are you?"},
        {"role": "assistant", "content": "I'm doing well, thanks!"},
        {"role": "user", "content": "Can you help me with Python?"},
        {"role": "assistant", "content": "Of course! What do you need?"},
    ]


@pytest.fixture
def archive_store(mock_fs):
    """SessionArchiveStore instance with mocked dependencies."""
    return SessionArchiveStore(fs=mock_fs)


@pytest.fixture
def compressor(mock_llm):
    """SessionCompressor instance with mocked dependencies."""
    return SessionCompressor(llm=mock_llm)


@pytest.fixture
def compressor_no_llm():
    """SessionCompressor instance without LLM (fallback mode)."""
    return SessionCompressor(llm=None)