"""
Test context management commands (/clear, /reset, /stats).
"""

import pytest
from slack_bot.context.storage import ContextStorage
from datetime import date


def test_clear_empty_context():
    """Test clearing empty context."""
    storage = ContextStorage("test_channel_clear")
    storage.clear()

    context = storage.get_context()
    assert len(context) == 0


def test_clear_with_messages():
    """Test clearing context with messages."""
    storage = ContextStorage("test_channel_clear_msgs")

    # Add some messages
    storage.add_message("user", "Hello")
    storage.add_message("assistant", "Hi there!", model="gemini")
    storage.add_message("user", "How are you?")

    # Verify messages exist
    context = storage.get_context()
    assert len(context) == 3

    # Clear
    storage.clear()

    # Verify cleared
    context = storage.get_context()
    assert len(context) == 0


def test_stats_calculation():
    """Test context stats calculation."""
    storage = ContextStorage("test_channel_stats")

    # Add messages with known lengths
    storage.add_message("user", "Hello")  # 5 chars
    storage.add_message("assistant", "Hi there!", model="gemini")  # 9 chars
    storage.add_message("user", "Test message")  # 12 chars

    context = storage.get_context()

    # Calculate stats
    total_chars = sum(len(msg.get("content", "")) for msg in context)
    estimated_tokens = total_chars // 3

    assert total_chars == 26  # 5 + 9 + 12
    assert estimated_tokens == 8  # 26 // 3

    # Cleanup
    storage.clear()


if __name__ == "__main__":
    pytest.main([__file__, "-v"])
