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_file_basic", func() steps.Step {
	var (
		UpStream   = &resource.ResourceHandle{}
		DownStream = &resource.ResourceHandle{}
		Drainer    = &resource.ResourceHandle{}
		WorkLoad   = &resource.ResourceHandle{}
		cfgString  = "data-dir = \"/tmp/drainer\"\nlog-level = \"info\"\ndest-type = \"mysql\"\n[dest-db]\nhost = \"downStream\"\nport = 3306\nuser = \"root\"\npassword = \"\" "
		DBName     = "binlog_file_basic"
	)

	return steps.
		NewBuilder().
		LoadEnv().
		LoadResourceFromEnv(utils.ResourcePrefix+"upstream", UpStream).
		LoadResourceFromEnv(utils.ResourcePrefix+"downstream", DownStream).
		LoadResourceFromEnv(utils.ResourcePrefix+"workload", WorkLoad).
		LoadResourceFromEnv(utils.ResourcePrefix+"upstreamdrainer", Drainer).
		CreateDatabase(UpStream, DBName).
		RunBinlogWorkload(UpStream, WorkLoad, Spec.GetWorkloadOption(workload.CommandTypePrepare)).
		Sleep(5*time.Minute).
		StartBinlogReparo(Drainer, cfgString).
		Sleep(5*time.Minute).
		CheckBinlogConsistency(UpStream, DownStream, DBName).
		Build()
})
