package main

import (
	"fmt"

	"github.com/juju/errors"
	"github.com/ngaut/log"
	client "github.com/pingcap/schrodinger/pkg/test_client"
	"k8s.io/api/core/v1"
)

func setUpPump(cli *client.Client, pumpVersion string) ([]string, error) {
	// log.Debug("stop all tidbs")
	// err := cli.StopTiDBs()
	// if err != nil {
	// 	return nil, errors.Trace(err)
	// }

	log.Debug("get pds")
	pd := cli.PdService()
	log.Debugf("pd addr %s", pd)

	log.Debug("start pump")
	pumps, err := startPump(cli, pumpVersion, pd, 3)

	if err != nil {
		log.Errorf("start pump failed %v", err)
		return nil, errors.Trace(err)
	}

	log.Debug("start tidbs")
	return pumps, errors.Trace(cli.StartTiDBs())
}

func startPump(cli *client.Client, pumpVersion string, pdAddr string, count int) ([]string, error) {
	var pumps []string
	for i := 0; i < count; i++ {
		ip, err := startAPump(cli, pumpVersion, pdAddr, i)
		if err != nil {
			return nil, errors.Trace(err)
		}
		pumps = append(pumps, ip)
	}
	return pumps, nil
}

func startAPump(cli *client.Client, pumpVersion string, pdAddr string, index int) (string, error) {
	url := getPumpURL(pumpVersion)
	pumpName := fmt.Sprintf("pump-%d", index)
	app, err := cli.CreateTool(url, "pump", pumpName, fmt.Sprintf("--L=debug --pd-urls=http://%s --metrics-addr=%s", pdAddr, ""), "", []v1.EnvVar{})

	if err != nil {
		return "", errors.Trace(err)
	}

	return app.Host, nil
}

func getPumpURL(pumpVersion string) string {
	return fmt.Sprintf("https://download.pingcap.org/tidb-binlog-%s-linux-amd64.tar.gz", pumpVersion)
}
