package datastore

import (
	"context"
	"testing"
	"time"
)

func TestListEmbeddingBackfillCandidatesFiltersCurrentGeneration(t *testing.T) {
	s := newTestStore(t)
	now := time.Now().UTC()
	for _, id := range []string{"a-current", "b-stale"} {
		if err := s.InsertFile(context.Background(), &File{
			FileID: id, StorageType: StorageDB9, StorageRef: "/blobs/" + id,
			Revision: 1, Status: StatusConfirmed, ContentText: "semantic " + id,
			CreatedAt: now, ConfirmedAt: &now,
		}); err != nil {
			t.Fatal(err)
		}
	}
	vec := testEmbeddingVector(0.2)
	if updated, err := s.UpdateFileEmbeddingForGeneration(context.Background(), "a-current", 1, 7, vec); err != nil || !updated {
		t.Fatalf("write current vector updated=%v err=%v", updated, err)
	}
	if updated, err := s.UpdateFileEmbeddingForGeneration(context.Background(), "b-stale", 1, 6, vec); err != nil || !updated {
		t.Fatalf("write stale vector updated=%v err=%v", updated, err)
	}

	rows, err := s.ListEmbeddingBackfillCandidates(context.Background(), "", 7, 100)
	if err != nil {
		t.Fatal(err)
	}
	if len(rows) != 1 || rows[0].InodeID != "b-stale" || rows[0].Revision != 1 {
		t.Fatalf("candidates=%+v, want b-stale", rows)
	}
}

func TestListEmbeddingBackfillCandidatesSharedScope(t *testing.T) {
	installSharedCoreFSSchema(t)
	const fsA, fsB int64 = 501, 502
	storeA := newSharedStore(t, fsA)
	insertSharedSearchFixture(t, storeA, fsA, "same-inode", "/a.txt", "tenant a")
	insertSharedSearchFixture(t, storeA, fsB, "same-inode", "/b.txt", "tenant b")

	rows, err := storeA.ListEmbeddingBackfillCandidates(context.Background(), "", 3, 100)
	if err != nil {
		t.Fatal(err)
	}
	if len(rows) != 1 || rows[0].InodeID != "same-inode" {
		t.Fatalf("candidates=%+v, want only fs_id=%d row", rows, fsA)
	}
}
