package base

import (
	"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/pkgv2/db"
	"go.uber.org/zap"
)

type BaseAction struct {
	BucketRepo    repo.BucketRepo
	TransProvider db.TransProvider
}

func NewBaseAction(
	transProvider db.TransProvider,
	bucketRepo repo.BucketRepo,
) BaseAction {
	return BaseAction{
		BucketRepo:    bucketRepo,
		TransProvider: transProvider,
	}
}

func (b *BaseAction) QueryBucket(ctx run.ExecuteContext, logger *zap.Logger) (*entity.Bucket, error) {
	bucketID, err := action.GetUint64FromRunVar(ctx, workflow.KeyBucketID)
	if err != nil {
		logger.Error("get bucket id from context error", zap.Error(err))
		return nil, err
	}
	bucket, err := b.BucketRepo.Load(ctx.Context(), bucketID)
	if err != nil {
		logger.Error("load bucket error", zap.Any("bucket id", bucketID), zap.Error(err))
		return nil, err
	}
	return bucket, err
}
