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_tiup_deploy", func() steps.Step {
	var (
		DownStream                = &resource.ResourceHandle{}
		WorkLoad                  = &resource.ResourceHandle{}
		Tiup                      = &resource.ResourceHandle{}
		DBName                    = "binlog_tiup_deploy"
		binlogVersion             string
		destVersion               string
		workloadTiupClusterOption = workload.TiupClusterOption{ClusterName: "testbinlog", ControlNode: "tiup-peer", Version: &binlogVersion, TopoFile: "global:\n  user: \"tidb\"\nmonitored:\n  node_exporter_port: 9200\n  blackbox_exporter_port: 9215\nserver_configs:\n  tidb:\n    binlog.enable: true\n    binlog.ignore-error: true\npd_servers:\n  - host: tiup-peer\n    client_port: 2979\n    peer_port: 2980\ntidb_servers:\n  - host: tiup-peer\n    status_port: 11080\n    port: 4000\ntikv_servers:\n  - host: tiup-peer\n    port: 21160\n    status_port: 21180\n\nmonitoring_servers:\n  - host: tiup-peer\ngrafana_servers:\n  - host: tiup-peer\npump_servers:\n  - host: tiup-peer\ndrainer_servers:\n  - host: tiup-peer\n    config:\n      syncer.db-type: \"mysql\"\n      syncer.to.host: \"downstream\"\n      syncer.to.user: \"root\"\n      syncer.to.password: \"\"\n      syncer.to.port: 3306\n"}
		// tiupClusterVersion        string
		mirrorAdress = "http://staging.tiup-server.pingcap.net"
	)

	return steps.
		NewBuilder().
		LoadEnv().
		LoadResourceFromEnv(utils.ResourcePrefix+"downstream", DownStream).
		LoadResourceFromEnv(utils.ResourcePrefix+"workload", WorkLoad).
		LoadResourceFromEnv(utils.ResourcePrefix+"tiup", Tiup).
		LoadParamFromEnv(utils.ParamPrefix+"binlogVersion", &binlogVersion).
		RunBinlogTiupMirrorSet(workload.TiupMirrorOption{MirrorAdress: &mirrorAdress}, Tiup).
		DeployBinlogTiupCluster(workloadTiupClusterOption, Tiup).
		UpgradeTiupCluster(&destVersion).
		CreateDatabaseTiup(DBName).
		RunBinlogWorkloadTiup(Spec.GetWorkloadOption(workload.CommandTypePrepare), WorkLoad).
		RunBinlogWorkloadTiup(Spec.GetWorkloadOption(workload.CommandTypeRun), WorkLoad).
		Sleep(10*time.Minute).
		CheckConsistencyBinlogTiup(workloadTiupClusterOption, DownStream, DBName).
		Build()
})
