package gitstore_test

import (
	"context"
	"os"
	"testing"

	"github.com/pingcap/agent-git-service/internal/gitstore"
)

func TestReadFileWithSHAAtRefUsesSingleSnapshot(t *testing.T) {
	tmpDir, err := os.MkdirTemp("", "gitstore-read-snapshot-*")
	if err != nil {
		t.Fatal(err)
	}
	defer os.RemoveAll(tmpDir)

	store, err := gitstore.New(tmpDir)
	if err != nil {
		t.Fatal(err)
	}
	ctx := context.Background()
	repoName := "user/read-snapshot"

	if err := initializeBareRepositoryFixture(store, ctx, repoName, "main", true); err != nil {
		t.Fatalf("Init: %v", err)
	}
	if _, err := store.WriteFile(ctx, repoName, "main", "page.md", "initial", []byte("v1\n")); err != nil {
		t.Fatalf("WriteFile initial: %v", err)
	}
	firstHead, err := store.HeadSHA(ctx, repoName, "main")
	if err != nil {
		t.Fatalf("HeadSHA initial: %v", err)
	}
	firstBody, firstBlob, err := store.ReadFileWithSHAAtRef(ctx, repoName, "page.md", firstHead)
	if err != nil {
		t.Fatalf("ReadFileWithSHAAtRef initial: %v", err)
	}

	if _, err := store.WriteFile(ctx, repoName, "main", "page.md", "advance", []byte("v2\n")); err != nil {
		t.Fatalf("WriteFile advance: %v", err)
	}
	secondBlob, err := store.BlobSHAAtRef(ctx, repoName, "page.md", "main")
	if err != nil {
		t.Fatalf("BlobSHAAtRef main: %v", err)
	}

	if string(firstBody) != "v1\n" {
		t.Fatalf("ReadFileWithSHAAtRef body = %q, want %q", firstBody, "v1\n")
	}
	if firstBlob == secondBlob {
		t.Fatalf("expected snapshot blob %q to differ from current blob %q after branch advance", firstBlob, secondBlob)
	}
}
