package main

import (
	"sync"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/infra-provider/pkg/consts"
)

func resetConfigForTest(t *testing.T) {
	t.Helper()
	conf = nil
	confOnce = sync.Once{}
}

func TestInitConfigDoesNotRequireClusterNamespaceForGKEProviders(t *testing.T) {
	tests := []struct {
		name     string
		provider string
	}{
		{
			name:     "gke",
			provider: consts.ProviderTypeGKE,
		},
		{
			name:     "gcp",
			provider: consts.ProviderTypeGCP,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			resetConfigForTest(t)
			t.Setenv("POD_NAMESPACE", "")

			err := InitConfig([]string{"--provider", tt.provider})

			require.NoError(t, err)
			require.Equal(t, tt.provider, GetConfig().Provider)
			require.Empty(t, GetConfig().ClusterNamespace)
		})
	}
}

func TestInitConfigClusterNamespaceDefaultsToPodNamespace(t *testing.T) {
	resetConfigForTest(t)
	t.Setenv("POD_NAMESPACE", "cluster-123")

	err := InitConfig([]string{"--provider", consts.ProviderTypeGKE})

	require.NoError(t, err)
	require.Equal(t, "cluster-123", GetConfig().ClusterNamespace)
}

func TestInitConfigClusterNamespaceFlagOverridesPodNamespace(t *testing.T) {
	resetConfigForTest(t)
	t.Setenv("POD_NAMESPACE", "cluster-from-env")

	err := InitConfig([]string{
		"--provider", consts.ProviderTypeGKE,
		"--cluster-namespace", "cluster-from-flag",
	})

	require.NoError(t, err)
	require.Equal(t, "cluster-from-flag", GetConfig().ClusterNamespace)
}
