package del

import (
	"time"

	"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"
)

type MarkDeletedAction struct {
	base.BaseAction
}

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

func (a *MarkDeletedAction) Name() string {
	return workflow.ActionDeleteBucketMarkDeleted
}

func (a *MarkDeletedAction) Run(ctx run.ExecuteContext, params interface{}) error {
	logger := action.GetLogger(ctx).Named(a.Name())
	logger.Info("action run")
	bucket, err := a.QueryBucket(ctx, logger)
	if err != nil {
		return err
	}
	bucket.Status = entity.BucketStatusDeleted
	deletedTS := time.Now().Unix()
	bucket.DeletedTime = &deletedTS
	return a.BucketRepo.Save(ctx.Context(), bucket)
}
