package del

import (
	"fmt"

	"github.com/shiningrush/fastflow/pkg/entity/run"
	"github.com/tidbcloud/dataflow-service/app/repo"
	"github.com/tidbcloud/dataflow-service/app/repo/entity"
	"github.com/tidbcloud/dataflow-service/app/workflow"
	"github.com/tidbcloud/dataflow-service/app/workflow/action"
	"github.com/tidbcloud/dataflow-service/app/workflow/action/bucket/base"
	"github.com/tidbcloud/dataflow-service/internal/db"
	"go.uber.org/zap"
)

type DeletePreCheckAction struct {
	base.BaseAction
}

func NewDeletePreCheckAction(
	transProvider db.TransProvider,
	bucketRepo repo.BucketRepo,
) *DeletePreCheckAction {
	return &DeletePreCheckAction{
		BaseAction: base.NewBaseAction(transProvider, bucketRepo),
	}
}

func (a *DeletePreCheckAction) Name() string {
	return workflow.ActionDeleteBucketPreCheck
}

func (a *DeletePreCheckAction) Run(ctx run.ExecuteContext, params interface{}) error {
	logger := action.GetLogger(ctx).Named(a.Name())
	logger.Info("action run start")
	bucket, err := a.QueryBucket(ctx, logger)
	if err != nil {
		return err
	}
	if bucket.Status != entity.BucketStatusDeleting {
		logger.Error("bucket is not deleting, this should not happen", zap.Uint64("bucket id", bucket.ID.Uint64()))
		return fmt.Errorf("bucket :%d is not in deleting status", bucket.ID)
	}
	return nil
}
