package aks

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/infra-provider/regional-server/api/v1alpha1"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/providerconfig"
)

func Test_getBucketResourceGroup(t *testing.T) {
	t.Run("prefer bucket resource group", func(t *testing.T) {
		rgName, err := getBucketResourceGroup(&v1alpha1.Bucket{Spec: v1alpha1.BucketSpec{
			AccountRef: &v1alpha1.AccountReference{
				ResourceGroupName: "existing-rg",
			},
		}})
		require.NoError(t, err)
		assert.Equal(t, "existing-rg", rgName)
	})

	t.Run("fallback to account cache", func(t *testing.T) {
		providerconfig.SetAzureAccountCache([]providerconfig.AzureAccountEntry{{
			SubscriptionID:      "sub-1",
			BucketResourceGroup: "bucket-rg",
		}})
		defer providerconfig.SetAzureAccountCache(nil)

		rgName, err := getBucketResourceGroup(&v1alpha1.Bucket{Spec: v1alpha1.BucketSpec{
			AccountRef: &v1alpha1.AccountReference{AccountID: "sub-1"},
		}})
		require.NoError(t, err)
		assert.Equal(t, "bucket-rg", rgName)
	})

	t.Run("missing cache entry", func(t *testing.T) {
		providerconfig.SetAzureAccountCache(nil)

		_, err := getBucketResourceGroup(&v1alpha1.Bucket{Spec: v1alpha1.BucketSpec{
			AccountRef: &v1alpha1.AccountReference{AccountID: "sub-2"},
		}})
		assert.ErrorContains(t, err, "bucket resource group is not set for subscription sub-2")
	})
}
