package infraapi

import (
	"testing"

	"github.com/stretchr/testify/assert"
	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/runtime"
	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
	"k8s.io/utils/pointer"
)

var scheme = runtime.NewScheme()

func init() {
	utilruntime.Must(cloudv1.AddToScheme(scheme))
	utilruntime.Must(corev1.AddToScheme(scheme))
}

func TestConvertNetworkStatus(t *testing.T) {
	n := &cloudv1.Network{}
	gardenerStatus := &cloudv1.GardenerNetworkStatus{
		VPCCidrBlock: "10.10.10.10/16",
	}
	n.Status.Import.RoleARN = "a:b:c"

	cloudv1.SetGardenerNetworkStatus(n, gardenerStatus)

	get, err := ConvertNetworkStatus(n)
	assert.Nil(t, err)
	assert.Equal(t, n.Status.Import.RoleARN, get.ImportRoleARN)
	assert.Equal(t, gardenerStatus.VPCCidrBlock, get.VPCCidrBlock)
}

func TestConvertClusterStatus(t *testing.T) {
	k8s := cloudv1.KubernetesStatus{
		Namespace: "ns",
	}
	gardenerStatus := cloudv1.GardenerStatus{
		NodeProvisioned: pointer.BoolPtr(true),
	}
	cr := &cloudv1.Cluster{}

	awsStatus := &cloudv1.AwsClusterStatus{
		Gardener:   gardenerStatus,
		Kubernetes: &k8s,
	}
	cloudv1.SetAwsClusterStatus(cr, awsStatus)
	s, err := ConvertClusterStatus(ProviderTypeAWS, cr)
	assert.Nil(t, err)
	assert.Equal(t, &ClusterStatus{GardenerStatus: gardenerStatus}, s)

	gcpStatus := &cloudv1.GcpClusterStatus{
		Gardener:   gardenerStatus,
		Kubernetes: &k8s,
	}
	cloudv1.SetGcpClusterStatus(cr, gcpStatus)
	s, err = ConvertClusterStatus(ProviderTypeGCP, cr)
	assert.Nil(t, err)
	assert.Equal(t, &ClusterStatus{GardenerStatus: gardenerStatus}, s)
}
