package create

import (
	"github.com/shiningrush/fastflow/pkg/entity/run"
	"github.com/tidbcloud/dataflow-service/app/workflow"
	"github.com/tidbcloud/dataflow-service/app/workflow/action"
	"github.com/tidbcloud/dataflow-service/app/workflow/action/backup/base"
	"go.uber.org/zap"
)

type FinalAction struct {
	base.BaseAction
}

func NewFinalAction(base base.BaseAction) *FinalAction {
	return &FinalAction{
		BaseAction: base,
	}
}

func (a *FinalAction) Name() string {
	return workflow.ActionSnapshotBackupCreationFinalStep
}

func (a *FinalAction) Run(ctx run.ExecuteContext, params interface{}) error {
	logger := action.GetLogger(ctx).Named(a.Name())
	logger.Info("action run start")
	defer logger.Info("action run finished")

	return action.InvokeRunActionWithRetry(ctx.Context(), logger, func() error {
		backup, err := a.QuerySnapshotBackup(ctx, logger)
		if err != nil {
			logger.Error("query snapshot backup error", zap.Error(err))
			return err
		}

		// Use enhanced logger with complete backup context
		enhancedLogger := a.EnhanceLoggerWithBackupContext(logger, backup)

		err = a.ClusterJob.DeregisterBackupClusterJob(ctx.Context(),
			backup.ClusterID.Uint64(), backup.ID.Uint64())
		if err != nil {
			enhancedLogger.Error("deregister backup cluster job error", zap.Error(err))
		}
		return err
	})
}
