package vpc

import (
	"github.com/tidbcloud/infra-provider/pkg/consts"
	"github.com/tidbcloud/infra-provider/pkg/deploy"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/controllers/vpc/task"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/controllers/vpc/task/aks"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/controllers/vpc/task/common"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/controllers/vpc/task/eks"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/controllers/vpc/task/gke"
)

func GetVPCTasks(r *VPCReconciler, c *task.Context) []deploy.Task {
	switch c.VPC.Spec.Provider {
	case consts.ProviderTypeEKS:
		return GetEKSVPCTasks(r, c)
	case consts.ProviderTypeGKE:
		return GetGKEVPCTasks(r, c)
	case consts.ProviderTypeAKS:
		return GetAKSVPCTasks(r, c)
	}

	return nil
}

func GetEKSVPCTasks(r *VPCReconciler, c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		common.NewGuardian(c),
		eks.NewVPC(c),
		eks.NewSecondaryCidr(c),
		eks.NewSecurityGroup(c),
		eks.NewSubnet(c),
		eks.NewSecondaryCidrSubnet(c),
		common.NewTrigger(c),
	}

	return tasks
}

func GetGKEVPCTasks(r *VPCReconciler, c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		common.NewGuardian(c),
		gke.NewVPC(c),
		gke.NewSubnet(c),
		gke.NewFirewall(c),
	}

	return tasks
}

func GetAKSVPCTasks(r *VPCReconciler, c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		common.NewGuardian(c),
		aks.NewResourceGroup(c),
		aks.NewVNet(c),
		aks.NewSubnet(c),
	}

	return tasks
}
