# retoor <retoor@molodetz.nl>

from tests.conftest import run_async
from devplacepy.services.deepsearch import chat as chat_module
from devplacepy.services.deepsearch.chat import DeepsearchChat
from devplacepy.services.deepsearch.embeddings import local_embed
from devplacepy.services.deepsearch.store import Chunk, VectorStore


def _seed(collection):
    store = VectorStore(collection)
    chunks = [
        Chunk(uid="c0", text="The transistor was invented at Bell Labs.", url="https://a.example", title="A"),
        Chunk(uid="c1", text="Silicon wafers are used to make chips.", url="https://b.example", title="B"),
    ]
    vectors = local_embed([c.text for c in chunks]).vectors
    run_async(store.add(chunks, vectors))


def test_answer_is_grounded_and_cited(monkeypatch):
    collection = "ds_chat_test_grounded"
    _seed(collection)
    try:
        async def fake_embed(texts, api_key, **kwargs):
            return local_embed(texts)

        async def fake_complete(messages, api_key, **kwargs):
            return "The transistor was invented at Bell Labs [1]."

        monkeypatch.setattr(chat_module, "embed_texts", fake_embed)
        monkeypatch.setattr(chat_module, "complete_chat", fake_complete)

        chat = DeepsearchChat(collection, "k")
        answer = run_async(chat.answer("where was the transistor invented"))
        assert "Bell Labs" in answer.text
        assert answer.citations
        assert answer.citations[0]["url"].startswith("https://")
    finally:
        VectorStore(collection).drop()


def test_answer_when_no_chunks(monkeypatch):
    collection = "ds_chat_test_empty"
    try:
        async def fake_embed(texts, api_key, **kwargs):
            return local_embed(texts)

        monkeypatch.setattr(chat_module, "embed_texts", fake_embed)
        chat = DeepsearchChat(collection, "k")
        answer = run_async(chat.answer("anything"))
        assert answer.citations == []
        assert "did not capture" in answer.text
    finally:
        VectorStore(collection).drop()
