package gcv2

import (
	"context"
	"path/filepath"
	"testing"

	"github.com/stretchr/testify/require"
	gcv2schema "github.com/tidbcloud/aws-shared-provider/pkg/tidbworker/schema/gcv2"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

func TestSyncJobIntoTableDoesNotReviveDoneTask(t *testing.T) {
	const (
		keyspaceName  = "keyspace-1"
		tidbPool      = "vip-tidb-pool"
		lastGCRunTime = int64(1710000000)
		lastGCRunTS   = uint64(123)
	)

	db, err := gorm.Open(sqlite.Open(filepath.Join(t.TempDir(), "gcv2.db")), &gorm.Config{})
	require.NoError(t, err)
	require.NoError(t, db.AutoMigrate(&gcv2schema.Task{}))
	require.NoError(t, db.Create(&gcv2schema.Task{
		KeyspaceName:  keyspaceName,
		TidbPool:      tidbPool,
		LastGCRunTime: lastGCRunTime,
		LastGCRunTs:   lastGCRunTS,
		State:         gcv2schema.StateDone,
	}).Error)

	h := &handler{db: db}
	require.False(t, h.syncJobIntoTable(
		context.Background(), keyspaceName, tidbPool, lastGCRunTime, "tidb-worker-gcv2-test"))

	var task gcv2schema.Task
	require.NoError(t, db.First(&task,
		"keyspace_name = ? AND last_gc_run_time = ? AND last_gc_run_ts = ?",
		keyspaceName, lastGCRunTime, lastGCRunTS,
	).Error)
	require.Equal(t, gcv2schema.StateDone, task.State)
	require.Empty(t, task.Runner)
	require.Zero(t, task.RunnerCreated)
}
