package scenario

import (
	"context"

	. "github.com/onsi/ginkgo"
	"github.com/pingcap/test-infra/sdk/resource"
	"golang.org/x/sync/errgroup"

	"github.com/pingcap/endless/pkg/client/tidb"
	. "github.com/pingcap/endless/pkg/matcher"
	. "github.com/pingcap/endless/pkg/util"
	"github.com/pingcap/endless/testcase/oltp/oltppkg"
	"github.com/pingcap/endless/testcase/oltp/scenario/params"
	"github.com/pingcap/endless/testcase/oltp/scenario/qhad"
)

func TAddColumn001(rootCtx context.Context, config Config, tc resource.TiDBCluster, tidbClient *tidb.Client) {
	workloadName := config.WorkloadName
	By("initializing parameters")
	var parameters *params.AddColumn
	if workloadName == "qhad" {
		parameters = Try(qhad.InitializeAddColumn001Params(rootCtx, tidbClient)).(*params.AddColumn)
	} else {
	}

	By("runnning add column")
	ctx, cancel := context.WithTimeout(rootCtx, parameters.RunTime)
	defer cancel()
	g, gctx := errgroup.WithContext(ctx)
	oltppkg.FunCommonCheck(gctx, tc, g, parameters.RunTime, nil)
	oltppkg.WaitFor(gctx, "Warm Up before add index", parameters.WarmUpTime)
	g.Go(WithGinkgoRecover(func() {
		if workloadName == "qhad" {
			Try(qhad.AddGeneratedColumnForAllTablesRepeatedly(ctx, tc, config.QHAdOpts))
		}
	}))
	Try(g.Wait())
}
