package commonazure

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestDedicatedNodePoolName(t *testing.T) {
	tests := []struct {
		name     string
		baseName string
		specName string
	}{
		{
			name:     "k8s default spec hashes base name only",
			baseName: "tidbcloud-o11y-k8s-project-1",
			specName: "default",
		},
		{
			name:     "empty spec is treated as default",
			baseName: "tidbcloud-o11y-k8s-project-1",
			specName: "",
		},
		{
			name:     "k8s non-default spec hashes base plus suffix",
			baseName: "tidbcloud-o11y-k8s-project-1",
			specName: "large",
		},
		{
			name:     "tidb non-default spec hashes base plus suffix",
			baseName: "tidbcloud-o11y-tidb-application-1",
			specName: "medium",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := DedicatedNodePoolName(tt.baseName, tt.specName)
			expectedInput := tt.baseName
			if tt.specName != "" && tt.specName != defaultSpecName {
				expectedInput = tt.baseName + "-" + tt.specName
			}
			want := sanitizeAKSNodePoolName(expectedInput)
			assert.Equal(t, want, got)
			assert.Len(t, got, 12)
			assert.Equal(t, "n", string(got[0]))
		})
	}
}

func TestDedicatedNodePoolNameDistinctForDistinctSpecs(t *testing.T) {
	base := "tidbcloud-o11y-k8s-project-1"
	defaultName := DedicatedNodePoolName(base, "default")
	mediumName := DedicatedNodePoolName(base, "medium")
	largeName := DedicatedNodePoolName(base, "large")

	assert.NotEqual(t, defaultName, mediumName)
	assert.NotEqual(t, defaultName, largeName)
	assert.NotEqual(t, mediumName, largeName)
}
