package upgrade

import (
	"context"
	"time"

	"github.com/pingcap/endless/testcase/oltp/oltppkg"
	"github.com/pingcap/test-infra/sdk/resource"
)

func OLTP_UPGRADE_FUN_001(
	ctx context.Context,
	tc resource.TiDBCluster,
	caseCmdParms oltppkg.CaseCmdParms,
	workloadRunParms oltppkg.WorkloadRunParms,
	benchToolSet resource.WorkloadNode,
) {
	runTimeParms := oltppkg.NewRunTimePara(2*time.Hour, 60*time.Minute, 0*time.Minute, 10*time.Minute)
	UpgradeOptions := UpgradeOptions{
		Tc:                           tc,
		CaseCmdParms:                 caseCmdParms,
		WorkloadRunParms:             workloadRunParms,
		RunTimeParms:                 *runTimeParms,
		TestType:                     "nothing",
		RestartCheckTimeAfterUpgrade: 10 * time.Minute,
		SlaCheckTime:                 10 * time.Minute,
		SlaCheckThreshhold:           0.3,
		BenchToolSet:                 benchToolSet,
	}
	UpgradeOptions.UpgradeTest(ctx)
}

func OLTP_UPGRADE_WITH_TOMBSTONE(
	ctx context.Context,
	tc resource.TiDBCluster,
	caseCmdParms oltppkg.CaseCmdParms,
	workloadRunParms oltppkg.WorkloadRunParms,
) {
	runTimeParms := oltppkg.NewRunTimePara(2*time.Hour, 90*time.Minute, 0*time.Minute, 10*time.Minute)
	UpgradeOptions := UpgradeOptions{
		Tc:                           tc,
		CaseCmdParms:                 caseCmdParms,
		WorkloadRunParms:             workloadRunParms,
		RunTimeParms:                 *runTimeParms,
		TestType:                     "tombstone",
		RestartCheckTimeAfterUpgrade: 10 * time.Minute,
		SlaCheckTime:                 10 * time.Minute,
		SlaCheckThreshhold:           0.5,
	}
	UpgradeOptions.UpgradeTest(ctx)
}

func OLTP_UPGRADE_DURING_SCALE_IN(
	ctx context.Context,
	tc resource.TiDBCluster,
	caseCmdParms oltppkg.CaseCmdParms,
	workloadRunParms oltppkg.WorkloadRunParms,
) {
	runTimeParms := oltppkg.NewRunTimePara(2*time.Hour, 90*time.Minute, 0*time.Minute, 10*time.Minute)
	UpgradeOptions := UpgradeOptions{
		Tc:                           tc,
		CaseCmdParms:                 caseCmdParms,
		WorkloadRunParms:             workloadRunParms,
		RunTimeParms:                 *runTimeParms,
		TestType:                     "during-scale-in",
		RestartCheckTimeAfterUpgrade: 10 * time.Minute,
		SlaCheckTime:                 10 * time.Minute,
		SlaCheckThreshhold:           0.5,
	}
	UpgradeOptions.UpgradeTest(ctx)
}
func OLTP_UPGRADE_DURING_SCALE_OUT(
	ctx context.Context,
	tc resource.TiDBCluster,
	caseCmdParms oltppkg.CaseCmdParms,
	workloadRunParms oltppkg.WorkloadRunParms,
) {
	runTimeParms := oltppkg.NewRunTimePara(2*time.Hour, 90*time.Minute, 0*time.Minute, 30*time.Minute)
	UpgradeOptions := UpgradeOptions{
		Tc:                           tc,
		CaseCmdParms:                 caseCmdParms,
		WorkloadRunParms:             workloadRunParms,
		RunTimeParms:                 *runTimeParms,
		TestType:                     "during-scale-out",
		RestartCheckTimeAfterUpgrade: 10 * time.Minute,
		SlaCheckTime:                 10 * time.Minute,
		SlaCheckThreshhold:           1.1,
	}
	UpgradeOptions.UpgradeTest(ctx)
}
