"""数据模型测试。"""

import pytest
from butler.session.state import SessionMode, PtyState, SessionState, MessageContext


def test_session_mode_enum():
    """测试会话模式枚举。"""
    assert SessionMode.NATURAL_LANGUAGE.value == "nl"
    assert SessionMode.INTERACTIVE.value == "interactive"


def test_pty_state_enum():
    """测试 PTY 状态枚举。"""
    assert PtyState.IDLE.value == "idle"
    assert PtyState.RUNNING.value == "running"
    assert PtyState.BLOCKED.value == "blocked"
    assert PtyState.UNKNOWN.value == "unknown"


def test_session_state_creation():
    """测试会话状态创建。"""
    state = SessionState(
        session_id="butler_test123",
        user_id="test123",
        pwd="/home/user",
        env={"HOME": "/home/user"},
    )
    assert state.session_id == "butler_test123"
    assert state.mode == SessionMode.NATURAL_LANGUAGE
    assert state.pwd == "/home/user"
    assert state.env["HOME"] == "/home/user"


def test_session_state_default_mode():
    """测试默认模式为自然语言模式。"""
    state = SessionState(session_id="test", user_id="test")
    assert state.mode == SessionMode.NATURAL_LANGUAGE


def test_session_state_touch():
    """测试 touch 方法更新时间。"""
    state = SessionState(session_id="test", user_id="test")
    old_time = state.last_active_at
    state.touch()
    assert state.last_active_at >= old_time


def test_message_context_creation():
    """测试消息上下文创建。"""
    ctx = MessageContext(
        message_id="msg123",
        user_id="user123",
        content="ls -la",
    )
    assert ctx.message_id == "msg123"
    assert ctx.is_command is False
    assert ctx.requires_approval is False


def test_message_context_command_detection():
    """测试命令检测。"""
    ctx = MessageContext(
        message_id="msg123",
        user_id="user123",
        content="/log recent",
        is_command=True,
    )
    assert ctx.is_command is True
