package gitops

import (
	"testing"

	"github.com/stretchr/testify/require"
	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/resource"

	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	"github.com/tidbcloud/shared-provider/pkg/types"
)

func TestProvider(t *testing.T) {
	cp := NewProviderConfigProvider()

	provider := &cloudv1.Provider{}

	instanceTypes := map[string]types.Resource{
		"shared1": {
			ResourceRequirements: corev1.ResourceRequirements{
				Requests: corev1.ResourceList{
					corev1.ResourceCPU: resource.MustParse("1"),
				},
				Limits: corev1.ResourceList{
					corev1.ResourceCPU: resource.MustParse("2"),
				},
			},
		},
	}

	spec := &types.SharedProviderSpec{
		PD:      instanceTypes,
		TiDB:    instanceTypes,
		TiKV:    instanceTypes,
		TiFlash: instanceTypes,
	}

	err := types.SetSharedProviderSpec(provider, spec)
	require.Nil(t, err)

	for _, component := range []cloudv1.ClusterComponent{
		&cloudv1.PD{InstanceType: "shared1"},
		&cloudv1.TiDB{InstanceType: "shared1"},
		&cloudv1.PD{InstanceType: "shared1"},
		&cloudv1.TiFlash{InstanceType: "shared1"},
	} {
		res, err := cp.GetResourceSpec(provider, component)
		require.Nil(t, err)
		require.Equal(t, instanceTypes["shared1"].ResourceRequirements, res.Resources)
	}
}
