package main

import (
	"fmt"
	"os"
	"os/exec"

	client "github.com/pingcap/schrodinger/pkg/test_client"
)

var cases = []string{
	"balance-leader",
	"add-nodes",
	"add-nodes-dynamic",
	"delete-nodes",
	"region-split",
	"region-merge",
	"hot-read",
	"hot-write",
	"makeup-down-replicas",
}

func setup() {
	cmd := "rpm --import https://mirror.go-repo.io/centos/RPM-GPG-KEY-GO-REPO"
	if err := exec.Command("bash", "-c", cmd).Run(); err != nil {
		client.Fatalf("cannot import go repo, error: %s", err)
	}
	cmd = "curl -s https://mirror.go-repo.io/centos/go-repo.repo | tee /etc/yum.repos.d/go-repo.repo"
	if err := exec.Command("bash", "-c", cmd).Run(); err != nil {
		client.Fatalf("cannot import go repo, error: %s", err)
	}
	cmd = "yum install -y git make golang"
	if err := exec.Command("bash", "-c", cmd).Run(); err != nil {
		client.Fatalf("cannot install dependencies, error: %s", err)
	}
	cmd = "git clone --depth=1 https://github.com/pingcap/pd.git /tmp/pd"
	if err := exec.Command("bash", "-c", cmd).Run(); err != nil {
		client.Fatalf("cannot clone pd simulator, error: %s", err)
	}
	if err := os.Chdir("/tmp/pd"); err != nil {
		client.Fatalf("cannot change dir, error: %s", err)
	}
	cmd = "make simulator"
	if err := exec.Command("bash", "-c", cmd).Run(); err != nil {
		client.Fatalf("cannot compile pd simulator, error: %s", err)
	}
}

func runTestCases(cli *client.Client) {
	for _, c := range cases {
		if err := cli.RestoreCat("empty"); err != nil {
			client.Errorf("[pd-simulator] restore empty cat failed: %v", err)
		}
		pdService := cli.PdService()
		pdAddr := fmt.Sprintf("-pd=%s", pdService)
		simCase := fmt.Sprintf("-case=%s", c)
		if err := exec.Command("/tmp/pd/bin/pd-simulator", pdAddr, simCase).Run(); err != nil {
			client.Errorf("cannot run case %s, error: %s", c, err)
		}
	}
}
