# retoor <retoor@molodetz.nl>

from devplacepy.services.devii.interaction.capabilities import (
    CHANNEL_CLI,
    CHANNEL_SITE_CHAT,
    CHANNEL_TELEGRAM,
    CHANNEL_UNKNOWN,
    channel_id_for_session,
    context_for,
    fragment_for,
    interactions_enabled,
)


def test_session_channel_mapping():
    assert channel_id_for_session("main") == CHANNEL_SITE_CHAT
    assert channel_id_for_session("docs") == CHANNEL_SITE_CHAT
    assert channel_id_for_session("telegram") == CHANNEL_TELEGRAM
    assert channel_id_for_session("cli") == CHANNEL_CLI
    assert channel_id_for_session("nope") == CHANNEL_UNKNOWN


def test_site_context_exposes_ui_prompt(local_db):
    ctx = context_for(CHANNEL_SITE_CHAT, owner_kind="user", owner_id="u1")
    assert ctx.capabilities["rich_widgets"] is True
    assert "ui_prompt" in ctx.tools
    assert "ui_cancel" in ctx.tools
    assert "ui_notify" in ctx.tools
    assert "interactions_get" in ctx.tools
    assert "interactions_set" in ctx.tools


def test_open_interaction_gates_to_cancel_only(local_db):
    ctx = context_for(
        CHANNEL_SITE_CHAT,
        open_interaction_id="ix-abc",
        owner_kind="user",
        owner_id="u1",
    )
    assert "ui_cancel" in ctx.tools
    assert "ui_prompt" not in ctx.tools
    assert "interactions_get" in ctx.tools


def test_unknown_channel_has_no_ui_prompt(local_db):
    ctx = context_for(CHANNEL_UNKNOWN, owner_kind="user", owner_id="u1")
    assert "ui_prompt" not in ctx.tools
    assert ctx.capabilities["confirm"] is False
    assert "interactions_get" in ctx.tools


def test_fragment_is_compact(local_db):
    text = fragment_for(context_for(CHANNEL_TELEGRAM, owner_kind="guest"))
    assert "CHANNEL: telegram" in text
    assert "TOOLS: ui_prompt" in text
    assert "INTERACTION: none" in text
    assert len(text) < 600


def test_interactions_enabled_default(local_db):
    assert interactions_enabled("guest", "") is True
