package network

import (
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/eks-provider/api/v1alpha1"
	"github.com/tidbcloud/eks-provider/controllers/network/task"
	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	"github.com/tidbcloud/infra-provider/pkg/consts"
	"github.com/tidbcloud/infra-provider/pkg/deploy"
)

func TestGetGKENetworkTasksExcludesPolicyControlProjectPolicy(t *testing.T) {
	tasks := GetGKENetworkTasks(&NetworkReconciler{}, &task.Context{
		Network: &cloudv1.Network{
			Spec: cloudv1.NetworkSpec{
				Provider: consts.ProviderTypeGKE,
			},
		},
		GKENetworkSpec: &v1alpha1.GKENetworkSpec{},
	})

	projectPolicyIndex := taskNameIndex(tasks, "ProjectPolicy")
	policyControlProjectPolicyIndex := taskNameIndex(tasks, "PolicyControlProjectPolicy")
	connectionIndex := taskNameIndex(tasks, "Connection")

	require.NotEqual(t, -1, projectPolicyIndex)
	require.Equal(t, -1, policyControlProjectPolicyIndex)
	require.NotEqual(t, -1, connectionIndex)
	require.Less(t, projectPolicyIndex, connectionIndex)
}

func taskNameIndex(tasks []deploy.Task, name string) int {
	for i, task := range tasks {
		if task.Name() == name {
			return i
		}
	}
	return -1
}
