package tidbrel

import (
	"context"
	"io"
	"time"

	_ "github.com/go-sql-driver/mysql"
	"github.com/pingcap/endless/testcase/oltp/oltppkg"
	"github.com/pingcap/test-infra/sdk/resource"
	_ "github.com/pingcap/test-infra/sdk/resource/impl/k8s"
)

func OLTP_TiDB_REL_TiDB_IO_DOWN(
	ctx context.Context,
	tc resource.TiDBCluster,
	benchToolset resource.WorkloadNode,
	pr *io.PipeReader,
) {
	tidbRelParams := TiDBRelParams{
		WarmUpTime:    10 * time.Minute,
		FaultType:     "io-delay",
		FaultDuration: 10 * time.Minute,
		RecoveryTime:  10 * time.Minute,
	}
	TiDBFaultTest(ctx, tc, benchToolset, pr, tidbRelParams)
}
func OLTP_TiDB_REL_TiDB_DOWN(
	ctx context.Context,
	tc resource.TiDBCluster,
	benchToolset resource.WorkloadNode,
	pr *io.PipeReader,
) {
	tidbRelParams := TiDBRelParams{
		WarmUpTime:    10 * time.Minute,
		FaultType:     "failure",
		FaultDuration: oltppkg.GetRandDuration(time.Minute, 10),
		RecoveryTime:  10 * time.Minute,
	}
	TiDBFaultTest(ctx, tc, benchToolset, pr, tidbRelParams)
}

func OLTP_TiDB_REL_TiDB_NETWORK_LOSS(
	ctx context.Context,
	tc resource.TiDBCluster,
	benchToolset resource.WorkloadNode,
	pr *io.PipeReader,
) {
	tidbRelParams := TiDBRelParams{
		WarmUpTime:    10 * time.Minute,
		FaultType:     "network-loss-100",
		FaultDuration: oltppkg.GetRandDuration(time.Minute, 10),
		RecoveryTime:  10 * time.Minute,
	}
	TiDBFaultTest(ctx, tc, benchToolset, pr, tidbRelParams)
}

func OLTP_TiDB_REL_TiDB_NETWORK_DELAY(
	ctx context.Context,
	tc resource.TiDBCluster,
	benchToolset resource.WorkloadNode,
	pr *io.PipeReader,
) {
	tidbRelParams := TiDBRelParams{
		WarmUpTime:    10 * time.Minute,
		FaultType:     "network-delay",
		FaultDuration: oltppkg.GetRandDuration(time.Minute, 10),
		RecoveryTime:  10 * time.Minute,
	}
	TiDBFaultTest(ctx, tc, benchToolset, pr, tidbRelParams)
}

func OLTP_TiDB_REL_TiDB_NETWORK_PARTITION(
	ctx context.Context,
	tc resource.TiDBCluster,
	benchToolset resource.WorkloadNode,
	pr *io.PipeReader,
) {
	tidbRelParams := TiDBRelParams{
		WarmUpTime:    10 * time.Minute,
		FaultType:     "network-partition",
		FaultDuration: oltppkg.GetRandDuration(time.Minute, 10) + 30*time.Minute,
		RecoveryTime:  10 * time.Minute,
	}
	TiDBFaultTest(ctx, tc, benchToolset, pr, tidbRelParams)
}
