package account

import (
	"context"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/common/constants"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/common/models"
)

func Test_SharedBucketReaderWriter(t *testing.T) {
	t.Run("get empty", func(t *testing.T) {
		b, err := sharedBucketRW.GetBinding(context.TODO(), models.SharedBucketBindingTarget{
			TargetType: constants.SharedBucketBindingCluster,
			TargetKey:  "test-cluster",
		})
		assert.NoError(t, err)
		assert.Empty(t, b)
	})
	t.Run("bind and unbind", func(t *testing.T) {
		err := sharedBucketRW.Bind(context.TODO(), models.SharedBucketInfo{
			BucketName:          "aws-bucket1",
			AWSSharedBucketInfo: &models.AWSSharedBucketInfo{},
		}, models.SharedBucketBindingTarget{
			TargetType: constants.SharedBucketBindingCluster,
			TargetKey:  "test-cluster-1",
		})
		assert.NoError(t, err)

		err = sharedBucketRW.Bind(context.TODO(), models.SharedBucketInfo{
			BucketName:          "aws-bucket2",
			AWSSharedBucketInfo: &models.AWSSharedBucketInfo{},
		}, models.SharedBucketBindingTarget{
			TargetType: constants.SharedBucketBindingProject,
			TargetKey:  "test-project-1",
		})
		assert.NoError(t, err)

		b, err := sharedBucketRW.GetBinding(context.TODO(), models.SharedBucketBindingTarget{
			TargetType: constants.SharedBucketBindingCluster,
			TargetKey:  "test-cluster-1",
		})
		assert.NoError(t, err)
		assert.NotEmpty(t, b)
		assert.Equal(t, "aws-bucket1", b)

		err = sharedBucketRW.Unbind(context.TODO(), models.SharedBucketBindingTarget{
			TargetType: constants.SharedBucketBindingCluster,
			TargetKey:  "test-cluster-1",
		})
		assert.NoError(t, err)

		b, err = sharedBucketRW.GetBinding(context.TODO(), models.SharedBucketBindingTarget{
			TargetType: constants.SharedBucketBindingCluster,
			TargetKey:  "test-cluster-1",
		})
		assert.NoError(t, err)
		assert.Empty(t, b)
	})
}
