package mongo

import (
	"context"
	"testing"

	"bit.admedia.com/scm/ad/adpilot-indexing-commit-intel.com/internal/store"
)

func TestStoreSaveAndGetAnalysis(t *testing.T) {
	mongoStore, cleanup := setupMongoStore(t)
	defer cleanup()

	ctx := context.Background()
	doc := store.CommitAnalysisDoc{
		AnalysisID:      "analysis_ad_example_abc",
		RepoID:          "ad/example",
		SnapshotID:      "snap_abc123",
		CommitSHA:       "target4567890ab",
		BaseCommitSHA:   "base1234567890",
		ChangedFiles:    []string{"internal/main.go"},
		ImpactedSymbols: []string{"Run"},
		Summary:         "1 files changed",
		EventID:         "evt_delta_test",
		DeltaID:         "delta_target456_a1b2",
	}

	if err := mongoStore.SaveAnalysis(ctx, doc); err != nil {
		t.Fatalf("SaveAnalysis: %v", err)
	}

	exists, err := mongoStore.ExistsByEventID(ctx, doc.EventID)
	if err != nil {
		t.Fatalf("ExistsByEventID: %v", err)
	}
	if !exists {
		t.Fatal("expected event_id to exist")
	}

	loaded, err := mongoStore.GetAnalysis(ctx, doc.AnalysisID)
	if err != nil {
		t.Fatalf("GetAnalysis: %v", err)
	}
	if loaded.Summary != doc.Summary || loaded.EventID != doc.EventID {
		t.Fatalf("unexpected loaded doc: %+v", loaded)
	}

	result, err := mongoStore.GetAnalysisResult(ctx, doc.AnalysisID)
	if err != nil {
		t.Fatalf("GetAnalysisResult: %v", err)
	}
	if result.CommitSHA != doc.CommitSHA {
		t.Fatalf("commit_sha: got %q", result.CommitSHA)
	}

	count, err := mongoStore.CountAnalysesBySnapshot(ctx, doc.RepoID, doc.SnapshotID)
	if err != nil {
		t.Fatalf("CountAnalysesBySnapshot: %v", err)
	}
	if count != 1 {
		t.Fatalf("expected count 1, got %d", count)
	}
}
