package internet

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

func GetInternetTasks(r *InternetReconciler, c *task.Context) []deploy.Task {
	switch c.Internet.Spec.Provider {
	case consts.ProviderTypeEKS:
		return GetEKSInternetTasks(r, c)
	case consts.ProviderTypeACK:
		return GetACKInternetTasks(r, c)
	case consts.ProviderTypeAKS:
		return GetAKSInternetTasks(r, c)
	}
	return nil
}

func GetEKSInternetTasks(r *InternetReconciler, c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		common.NewGuardian(c),
		eks.NewInternetGateway(c),
		eks.NewIPAddress(c),
		eks.NewNAT(c),
		eks.NewRoute(c),
		eks.NewS3GatewayEndpoint(c),
		eks.NewECRInterfaceEndpoint(c),
	}
	return tasks
}

func GetACKInternetTasks(r *InternetReconciler, c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		common.NewGuardian(c),
		ack.NewInternetGateway(c),
		ack.NewIPAddress(c, r.aliyunCli),
		ack.NewNAT(c),
		ack.NewRoute(c),
		ack.NewSNATEntry(c),
		ack.NewOSSGatewayEndpoint(c, r.aliyunCli),
	}
	return tasks
}

func GetAKSInternetTasks(r *InternetReconciler, c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		common.NewGuardian(c),
		aks.NewIPAddress(c),
		aks.NewNATGateway(c),
	}
	return tasks
}
