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_snapshot_embedding_pipeline
from tests.integration.fakes import seed_snapshot_upstream


@pytest.mark.integration
def test_snapshot_pipeline_skips_unchanged_records_on_reindex(integration_env):
    fake_db = integration_env["db"]
    fake_qdrant = integration_env["qdrant"]
    seed_snapshot_upstream(fake_db)

    run = asyncio.run(
        embedding_run_repo.upsert_run(
            repo_id="AD/example-repo",
            snapshot_id="snap_abc123",
            event_id="evt_reindex_1",
        )
    )

    first = asyncio.run(
        run_snapshot_embedding_pipeline(
            run_id=run.run_id,
            repo_id="AD/example-repo",
            snapshot_id="snap_abc123",
            commit_sha="a1b2c3d4e5f6",
            artifact_uri="mongo://snapshot_graphs/art_snap_abc123_merged",
            event_id="evt_reindex_1",
        )
    )
    assert first["built_count"] == 2
    assert len(fake_qdrant.points) == 2

    run2 = asyncio.run(
        embedding_run_repo.upsert_run(
            repo_id="AD/example-repo",
            snapshot_id="snap_abc123",
            event_id="evt_reindex_2",
        )
    )

    second = asyncio.run(
        run_snapshot_embedding_pipeline(
            run_id=run2.run_id,
            repo_id="AD/example-repo",
            snapshot_id="snap_abc123",
            commit_sha="a1b2c3d4e5f6",
            artifact_uri="mongo://snapshot_graphs/art_snap_abc123_merged",
            event_id="evt_reindex_2",
        )
    )

    assert second["skipped_unchanged"] == 2
    assert second["built_count"] == 0
    assert second["embed"]["embedded"] == 0
    assert len(fake_qdrant.points) == 2
