import asyncio

import pytest

from app.models.enums import EmbedStatus
from app.repositories import embedding_record_repo, embedding_run_repo
from app.services.pipeline_service import run_commit_analysis_embedding_pipeline
from tests.integration.fakes import seed_commit_upstream


@pytest.mark.integration
def test_commit_pipeline_builds_embeds_and_indexes(integration_env):
    fake_qdrant = integration_env["qdrant"]
    seed_commit_upstream(integration_env["db"])

    run = asyncio.run(
        embedding_run_repo.upsert_run(
            repo_id="AD/example-repo",
            snapshot_id="b2c3d4e5f6a7",
            event_id="evt_analysis_01",
            run_type="commit_analysis",
        )
    )

    result = asyncio.run(
        run_commit_analysis_embedding_pipeline(
            run_id=run.run_id,
            repo_id="AD/example-repo",
            commit_sha="b2c3d4e5f6a7",
            analysis_id="analysis_b2c3d4",
            event_id="evt_analysis_01",
            snapshot_id="snap_abc123",
        )
    )

    assert result["status"] == "completed"
    assert result["built_count"] == 1
    assert result["embed"]["indexed"] == 1
    assert len(fake_qdrant.points) == 1

    record = asyncio.run(embedding_record_repo.get_record("emb_analysis_b2c3d4"))
    assert record is not None
    assert record.source_type.value == "commit"
    assert record.embed_status == EmbedStatus.EMBEDDED
