package main

import (
	"context"

	"github.com/google/uuid"
	"github.com/pingcap/test-infra/caselib/pkg/host"
	"github.com/pingcap/test-infra/caselib/pkg/steps"
	"github.com/pingcap/test-infra/caselib/pkg/utils"
	"github.com/pingcap/test-infra/common/model/resource"
	_ "github.com/pingcap/test-infra/sdk/resource/impl/k8s"
	"go.uber.org/zap"
)

func DumplingToMinio() steps.Step {
	var (
		mysqlRes    = &resource.ResourceHandle{}
		dumplingRes = &resource.ResourceHandle{}
		mcRes       = &resource.ResourceHandle{}
		mcRmOpts    = &host.McRmOpts{}
		opts        = &host.DumplingGeneralOpts{}
		uniq        = uuid.New().String()
	)

	return steps.
		NewBuilder().
		LoadEnv().
		LoadResourceFromEnv(utils.ParamPrefix+"dumpling_opts", opts).
		LoadResourceFromEnv(utils.ParamPrefix+"mc_rm_opts", mcRmOpts).
		LoadResourceFromEnv(utils.ResourcePrefix+"target", mysqlRes).
		LoadResourceFromEnv(utils.ResourcePrefix+"dumpling", dumplingRes).
		LoadResourceFromEnv(utils.ResourcePrefix+"mc", mcRes).
		NewUniqPath(&opts.Output, uniq).
		NewUniqPath(&mcRmOpts.Path, uniq).
		Dumpling(dumplingRes, mysqlRes, opts).
		McRemove(mcRmOpts, mcRes).
		Build()
}

func main() {
	_, logger := utils.GetCtxAndLogger()
	ctx := steps.New(context.Background())
	if err := DumplingToMinio().Execute(ctx); err != nil {
		logger.Fatal("DumplingToMinio failed", zap.Error(err))
	}
	logger.Info("DumplingToMinio finished")
}
