package loadbalancer

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

func GetLoadBalancerTasks(c *task.Context, r *LoadBalancerReconciler) []deploy.Task {
	switch c.VPC.Spec.Provider {
	case consts.ProviderTypeEKS:
		return GetEKSLoadBalancerTasks(c, r)
	case consts.ProviderTypeACK:
		return GetACKLoadBalancerTasks(c, r)
	case consts.ProviderTypeAKS:
		return GetAKSLoadBalancerTasks(c, r)
	default:
		return nil
	}
}

func GetEKSLoadBalancerTasks(c *task.Context, r *LoadBalancerReconciler) []deploy.Task {
	return []deploy.Task{
		task.NewGuardian(c),
		eks.NewService(c, r.awsCli),
		eks.NewDNS(c, r.awsCli),
	}
}

func GetACKLoadBalancerTasks(c *task.Context, r *LoadBalancerReconciler) []deploy.Task {
	return []deploy.Task{
		task.NewGuardian(c),
		ack.NewSecurityGroup(c),
		ack.NewService(c, r.aliyunCli),
		ack.NewDNS(c),
	}
}

func GetAKSLoadBalancerTasks(c *task.Context, r *LoadBalancerReconciler) []deploy.Task {
	return []deploy.Task{
		task.NewGuardian(c),
		aks.NewService(c),
		aks.NewDNS(c),
	}
}
