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 {
	name := types.NamespacedName{
		Name:      t.getProviderConfigName(),
		Namespace: t.SinkEndpoint.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 sink endpoints in the same dataplane k8s
// Do not clean the providerconfig when a single sink point is deleted
func (t *providerConfig) Delete(ctx context.Context) deploy.Result {
	return deploy.Done()
}
