package impl

import (
	"context"
	"testing"
	"time"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/dataflow-service/app/repo"
	"github.com/tidbcloud/dataflow-service/app/repo/entity"
	"github.com/tidbcloud/pkgv2/db"
)

func TestClassicRestoreAccessGetOrCreateKeepsOriginalRequest(t *testing.T) {
	testDB, err := repo.GetFakeDB()
	require.NoError(t, err)
	repository := NewClassicRestoreAccessRepo(db.NewProvider(testDB))
	ctx := context.Background()
	expiresAt := time.Now().UTC().Add(time.Hour).Truncate(time.Second)

	original, berr := repository.GetOrCreate(ctx, &entity.ClassicRestoreAccess{
		RestoreID: "repo-test-restore", BucketID: 991, BackupID: 1001,
		AWSAccountID: "123456789012", RoleName: "role-1", RoleARN: "role-arn-1",
		RequestHash: "original", ExpiresAt: expiresAt,
	})
	require.Nil(t, berr)
	require.NotZero(t, original.ID)

	existing, berr := repository.GetOrCreate(ctx, &entity.ClassicRestoreAccess{
		RestoreID: "repo-test-restore", BucketID: 991, BackupID: 2002,
		AWSAccountID: "123456789012", RoleName: "role-2", RoleARN: "role-arn-2",
		RequestHash: "drifted", ExpiresAt: expiresAt.Add(time.Hour),
	})
	require.Nil(t, berr)
	require.Equal(t, original.ID, existing.ID)
	require.Equal(t, entity.ID(1001), existing.BackupID)
	require.Equal(t, "original", existing.RequestHash)

	require.Nil(t, repository.Delete(ctx, original.ID))
}
