package task

import (
	"context"

	"github.com/crossplane/provider-aws/apis/eks/v1beta1"
	"github.com/tidbcloud/eks-provider/api/v1alpha1"
	"github.com/tidbcloud/eks-provider/pkg/config"
	"github.com/tidbcloud/eks-provider/pkg/deploy"
	"github.com/tidbcloud/eks-provider/pkg/k8s"
	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

type Context struct {
	// Transient during a deployment
	err     error
	cluster *v1beta1.Cluster
	remote  k8s.ClientGetter

	// Injected from the caller
	Local        client.Client
	Network      *cloudv1.Network
	NetworkSpec  *v1alpha1.EKSNetworkSpec
	ProviderSpec *v1alpha1.EKSProviderSpec
	Config       config.RootConfig
}

type BaseTask struct {
	*Context
}

func (t *BaseTask) Name() string {
	return ""
}

func (t *BaseTask) Create(ctx context.Context) deploy.Result {
	return deploy.FromError(nil)
}

func (t *BaseTask) PostCreate(ctx context.Context) deploy.Result {
	return deploy.FromError(nil)
}

func (t *BaseTask) Delete(ctx context.Context) deploy.Result {
	return deploy.FromError(nil)
}

func (t *BaseTask) PostDelete(ctx context.Context) deploy.Result {
	return deploy.FromError(nil)
}

type Reset struct {
	*BaseTask
}

func NewReset(ctx *Context) *Reset {
	return &Reset{BaseTask: &BaseTask{Context: ctx}}
}

func (t *Reset) Name() string {
	return "ResetErrors"
}

func (t *Reset) Create(ctx context.Context) deploy.Result {
	t.err = nil
	return deploy.FromError(nil)
}

func (t *Reset) Delete(ctx context.Context) deploy.Result {
	t.err = nil
	return deploy.FromError(nil)
}
