package task

import (
	"context"

	"github.com/tidbcloud/infra-provider/pkg/deploy"
	"github.com/tidbcloud/infra-provider/pkg/k8s"
	"k8s.io/apimachinery/pkg/types"
)

type providerConfig struct {
	*baseTask
}

func NewProviderConfigTask(ctx *Context) deploy.Task {
	return &providerConfig{
		baseTask: &baseTask{Context: ctx},
	}
}

func (t *providerConfig) Name() string {
	return "ProviderConfig"
}

func (t *providerConfig) Create(ctx context.Context) deploy.Result {
	k8sName, err := t.CloudProvider.GetKubernetesName(ctx)
	if err != nil {
		return deploy.Error(err)
	}
	name := types.NamespacedName{
		Name:      t.getProviderConfigName(k8sName),
		Namespace: t.Cdc.Namespace,
	}
	pc, err := t.CloudProvider.BuildProviderConfig(name)
	if err != nil {
		return deploy.Error(err)
	}
	return deploy.PanicOrDone(k8s.Apply(ctx, t.Local, pc))
}

// some cloud resources created with providerconfig are shared by
// all cdc clusters in the same dataplane k8s
// Do not clean the providerconfig when a single cdc cluster is deleted
func (t *providerConfig) Delete(ctx context.Context) deploy.Result {
	return deploy.Done()
}
