package store_test

import (
	"context"
	"strings"
	"testing"

	"bit.admedia.com/scm/ad/adpilot-indexing-code-parser.com/internal/contracts/graph"
	"bit.admedia.com/scm/ad/adpilot-indexing-code-parser.com/internal/store"
)

func TestFilesystemStoreFindArtifactByCommitFile(t *testing.T) {
	fs, err := store.NewFilesystemStore(t.TempDir())
	if err != nil {
		t.Fatalf("NewFilesystemStore: %v", err)
	}

	artifact := sampleArtifact("internal/main.go")
	artifact.CommitSHA = "base123"
	id, _, err := fs.SaveArtifact(context.Background(), artifact)
	if err != nil {
		t.Fatalf("SaveArtifact: %v", err)
	}

	found, foundID, err := fs.FindArtifactByCommitFile(context.Background(), artifact.RepoID, "base123", "internal/main.go")
	if err != nil {
		t.Fatalf("FindArtifactByCommitFile: %v", err)
	}
	if foundID != id {
		t.Fatalf("artifact id: got %q, want %q", foundID, id)
	}
	if found.CommitSHA != "base123" {
		t.Fatalf("commit_sha: got %q", found.CommitSHA)
	}
}

func TestFilesystemStoreSaveDelta(t *testing.T) {
	fs, err := store.NewFilesystemStore(t.TempDir())
	if err != nil {
		t.Fatalf("NewFilesystemStore: %v", err)
	}

	delta := graph.Delta{
		SchemaVersion:   graph.DeltaSchemaVersionV1,
		RepoID:          "ad/example",
		SnapshotID:      "snap_1",
		BaseCommitSHA:   "base",
		TargetCommitSHA: "target",
		ChangedFiles:    []string{"main.go"},
	}

	id1, uri1, err := fs.SaveDelta(context.Background(), delta)
	if err != nil {
		t.Fatalf("SaveDelta: %v", err)
	}
	id2, uri2, err := fs.SaveDelta(context.Background(), delta)
	if err != nil {
		t.Fatalf("second SaveDelta: %v", err)
	}
	if id1 != id2 || uri1 != uri2 {
		t.Fatalf("expected deterministic delta id/uri, got %q/%q and %q/%q", id1, uri1, id2, uri2)
	}
	if !strings.HasPrefix(uri1, "file://") {
		t.Fatalf("uri: got %q", uri1)
	}
}
