import asyncio
from pathlib import Path

from src.ai.memory import MemorySystem


def test_query_does_not_use_embedding_when_disabled(tmp_path: Path):
    calls = {"count": 0}

    async def fake_embed(_text: str):
        calls["count"] += 1
        return [0.1] * 8

    memory = MemorySystem(
        storage_path=tmp_path / "memory.json",
        embed_func=fake_embed,
        use_vector_db=False,
        use_query_embedding=False,
    )

    # 入库路径仍会触发 embedding
    stored = asyncio.run(
        memory.add_long_term(
            user_id="u1",
            content="我喜欢苹果和香蕉",
            importance=0.9,
            metadata={"source": "test"},
        )
    )
    assert stored is not None
    assert calls["count"] == 1

    # 查询上下文与搜索均不触发 embedding
    asyncio.run(memory.get_context(user_id="u1", query="苹果"))
    asyncio.run(memory.search_long_term(user_id="u1", query="苹果", limit=5))
    assert calls["count"] == 1

    asyncio.run(memory.close())


def test_query_uses_embedding_when_enabled(tmp_path: Path):
    calls = {"count": 0}

    async def fake_embed(_text: str):
        calls["count"] += 1
        return [0.1] * 8

    memory = MemorySystem(
        storage_path=tmp_path / "memory.json",
        embed_func=fake_embed,
        use_vector_db=False,
        use_query_embedding=True,
    )

    asyncio.run(
        memory.add_long_term(
            user_id="u1",
            content="北京天气不错",
            importance=0.9,
            metadata={"source": "test"},
        )
    )
    assert calls["count"] == 1

    asyncio.run(memory.get_context(user_id="u1", query="北京"))
    assert calls["count"] >= 2

    asyncio.run(memory.close())
