import asyncio

from app.services import repo_docs_sync_service


class _Run:
    def __init__(self, run_id: str):
        self.run_id = run_id


def test_ingest_repo_docs_includes_discovered_paths(monkeypatch):
    repo_id = "ad/repo"
    discovered = [
        {
            "repo_id": repo_id,
            "doc_path": "README.md",
            "doc_type": "readme",
            "file_name": "README.md",
            "relative_path": "",
            "file_extension": ".md",
        },
        {
            "repo_id": repo_id,
            "doc_path": "docs/api.md",
            "doc_type": "docs",
            "file_name": "api.md",
            "relative_path": "docs",
            "file_extension": ".md",
        },
    ]

    def _fetch(_repo_id):
        assert _repo_id == repo_id
        return {"status": "active", "last_commit_sha": "abc123"}

    def _discover(_repo_id):
        assert _repo_id == repo_id
        return list(discovered)

    def _read(_repo_id, rel_path):
        return f"# {rel_path}"

    async def _create_parse_run(_request):
        return _Run("run_1")

    async def _process_ingestion(_run_id, _request):
        return None

    monkeypatch.setattr(repo_docs_sync_service, "_fetch_repo_metadata", _fetch)
    monkeypatch.setattr(repo_docs_sync_service, "_discover_markdown_docs_with_metadata", _discover)
    monkeypatch.setattr(repo_docs_sync_service, "_read_repo_file", _read)
    monkeypatch.setattr(repo_docs_sync_service.ingestion_service, "create_parse_run", _create_parse_run)
    monkeypatch.setattr(repo_docs_sync_service.ingestion_service, "process_ingestion", _process_ingestion)

    result = asyncio.run(repo_docs_sync_service.ingest_repo_docs(repo_id))

    assert result["repo_id"] == repo_id
    assert result["discovered_paths"] == ["README.md", "docs/api.md"]
    assert result["discovered_docs"] == discovered
    assert result["total_docs_found"] == 2
    assert result["processed"] == 2
    assert result["failed"] == 0
