"""Visual structure contract for the conversation-first mobile shell."""

from pathlib import Path


INDEX_HTML = Path(__file__).parents[1].joinpath("dual_agent", "web.py").read_text(encoding="utf-8")


def test_mobile_defaults_to_chat_first_surface():
    assert '<body class="show-main">' in INDEX_HTML
    assert 'id="mobile-menu"' in INDEX_HTML


def test_chat_style_task_drawer_present():
    assert 'id="task-drawer"' in INDEX_HTML
    assert 'function toggleTaskDrawer' in INDEX_HTML
    assert 'class="task-status-trigger"' in INDEX_HTML
    assert 'id="drawer-stage"' in INDEX_HTML


def test_chat_composer_uses_compact_input_shell():
    assert 'class="composer-shell"' in INDEX_HTML
    assert 'placeholder="说点什么（Enter 发送，Shift+Enter 换行）"' in INDEX_HTML


def test_ui_uses_real_icon_library():
    assert 'remixicon' in INDEX_HTML
    assert 'class="ri-' in INDEX_HTML


def test_repository_can_be_selected_without_removing_manual_input():
    assert 'id="repo"' in INDEX_HTML
    assert 'list="repo-options"' in INDEX_HTML
    assert 'id="repo-options"' in INDEX_HTML
    assert "loadRepoOptions" in INDEX_HTML


def test_models_are_select_controls_driven_by_backend_catalog():
    assert '<select id="m_planner"' in INDEX_HTML
    assert '<select id="m_implementer"' in INDEX_HTML
    assert "CODEX_MODELS" not in INDEX_HTML
    assert "CLAUDE_MODELS" not in INDEX_HTML
    assert "info.models" in INDEX_HTML
    assert "info.efforts" in INDEX_HTML
    assert "selectOptionsHtml" in INDEX_HTML


def test_discussion_draft_is_persisted_and_focus_is_keyboard_safe():
    assert "FORM_STORAGE_KEY" in INDEX_HTML
    assert "saveDiscussionForm" in INDEX_HTML
    assert "restoreDiscussionForm" in INDEX_HTML
    assert "scrollIntoView({block:'center'" in INDEX_HTML
    assert 'class="discussion-form"' in INDEX_HTML


def test_saved_model_is_restored_after_options_are_loaded():
    assert "loadAgents().then(restoreDiscussionForm)" in INDEX_HTML

