package bucket

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

func GetBucketTasks(c *task.Context) []deploy.Task {
	switch c.Config.Provider {
	case consts.ProviderTypeACK:
		return GetACKBucketTasks(c)
	case consts.ProviderTypeAKS:
		return GetAKSBucketTasks(c)
	case consts.ProviderTypeEKS:
		return GetEKSBucketTasks(c)
	}
	return nil
}

func GetEKSBucketTasks(c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		common.NewGuardian(c),
		eks.NewBucket(c),
		eks.NewBucketPolicy(c),
		eks.NewBucketLifecycleRules(c),
	}
	return tasks
}

func GetACKBucketTasks(c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		common.NewGuardian(c),
		ack.NewBucket(c),
		ack.NewBucketPolicy(c),
		ack.NewBucketLifecycleRules(c),
	}
	return tasks
}

func GetAKSBucketTasks(c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		common.NewGuardian(c),
		aks.NewStorageAccount(c),
		aks.NewContainer(c),
		aks.NewRoleAssignment(c),
		aks.NewLifecycle(c),
	}
	return tasks
}
