package aks

import (
	"testing"

	"github.com/tidbcloud/infra-provider/regional-server/api/v1alpha1"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/controllers/loadbalancer/task"
)

func newFakeService(c *task.Context) *Service {
	return &Service{BaseTask: &task.BaseTask{Context: c}}
}

func newFakeServiceTask(t *testing.T) *Service {
	return newFakeService(fakeTaskContext(t))
}

func TestGetAKSLoadBalancerResourceID(t *testing.T) {
	tests := []struct {
		name     string
		lbType   v1alpha1.LoadBalancerType
		svcUID   string
		expected string
	}{
		{
			name:     "Public Load Balancer",
			lbType:   v1alpha1.PublicLoadBalancerType,
			svcUID:   "cf07ffb8-ce03-46d3-9ee1-73a529ebfbfc",
			expected: "/subscriptions/subscription-id-1/resourceGroups/foo-foo-a41fde36-node-rg/providers/Microsoft.Network/loadBalancers/kubernetes/frontendIPConfigurations/acf07ffb8ce0346d39ee173a529ebfbf",
		},
		{
			name:     "Private Load Balancer",
			lbType:   v1alpha1.PrivateLoadBalancerType,
			svcUID:   "cf07ffb8-ce03-46d3-9ee1-73a529ebfbfc",
			expected: "/subscriptions/subscription-id-1/resourceGroups/foo-foo-a41fde36-node-rg/providers/Microsoft.Network/loadBalancers/kubernetes-internal/frontendIPConfigurations/acf07ffb8ce0346d39ee173a529ebfbf",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			st := newFakeServiceTask(t)
			st.LoadBalancer.Spec.Type = tt.lbType
			got := st.getAKSLoadBalancerResourceID(tt.svcUID)
			if got != tt.expected {
				t.Errorf("getAKSLoadBalancerResourceID() = %v, want %v", got, tt.expected)
			}
		})
	}
}
