import pytest

from app.core import database
from app.core.config import Settings


class _FakeClient:
    def __init__(self):
        self.databases: dict[str, object] = {}

    def __getitem__(self, name: str):
        if name not in self.databases:
            self.databases[name] = {"name": name}
        return self.databases[name]


@pytest.fixture
def patched_client(monkeypatch):
    fake_client = _FakeClient()
    test_settings = Settings(
        _env_file=None,
        DATABASE_NAME="adpilot_indexing",
        DOCS_MONGODB_DATABASE="repo_docs",
        CODE_CHUNKS_MONGODB_DATABASE="adpilot_code_parser",
        COMMIT_ANALYSES_MONGODB_DATABASE="adpilot_commit_intel",
    )
    monkeypatch.setattr(database, "_client", fake_client)
    monkeypatch.setattr(database, "settings", test_settings)
    return fake_client


def test_get_db_uses_embedding_database(patched_client):
    db = database.get_db()
    assert db["name"] == "adpilot_indexing"


def test_get_docs_db_uses_docs_database(patched_client):
    db = database.get_docs_db()
    assert db["name"] == "repo_docs"


def test_get_code_chunks_db_uses_parser_database(patched_client):
    db = database.get_code_chunks_db()
    assert db["name"] == "adpilot_code_parser"


def test_get_commit_analyses_db_uses_commit_intel_database(patched_client):
    db = database.get_commit_analyses_db()
    assert db["name"] == "adpilot_commit_intel"
