package testcases

import (
	"time"

	"github.com/pingcap/test-infra/caselib/pkg/model/workload"
	"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"
)

var _ = AddTestCase("binlog_ddl_compatibility", func() steps.Step {
	var (
		upStream   = &resource.ResourceHandle{}
		downStream = &resource.ResourceHandle{}
		workLoad   = &resource.ResourceHandle{}
		dbName     = "binlog_ddl_compatibility"
		executeSql string
	)

	return steps.
		NewBuilder().
		LoadEnv().
		LoadResourceFromEnv(utils.ResourcePrefix+"upstream", upStream).
		LoadResourceFromEnv(utils.ResourcePrefix+"downstream", downStream).
		LoadResourceFromEnv(utils.ResourcePrefix+"workload", workLoad).
		LoadParamFromEnv(utils.ParamPrefix+"executeSql", &executeSql).
		CreateDatabase(upStream, dbName).
		ExecuteSqlStatements(upStream, &executeSql).
		RunBinlogWorkload(upStream, workLoad, Spec.GetWorkloadOption(workload.CommandTypePrepare)).
		RunBinlogWorkload(upStream, workLoad, Spec.GetWorkloadOption(workload.CommandTypeRun)).
		SendBinlogFinishMark(upStream, dbName).
		WaitBinlogFinishMark(downStream, dbName, 10*time.Minute).
		CheckBinlogConsistency(upStream, downStream, dbName).
		Build()
})
