package main

import (
	"flag"
	"log"
	"os"

	"github.com/pingcap/tidb-test/bench_test/bench-tpcc/tpcc"
)

var (
	host     = flag.String("host", "127.0.0.1", "host address")
	port     = flag.Int("port", 50004, "host port")
	user     = flag.String("user", "root", "set user of the database")
	password = flag.String("password", "", "set password of the database ")
	database = flag.String("database", "test", "tidb database, use to test")
	createDB = flag.Bool("createdb", false, "attempt to create named db, dropping first if exists (must be able to connect to default db to do so).")
	// DO NOT WRITE ANY TOKENS IN CODE
	alertAddr = flag.String("alert-addr", "", "alert address")

	tpccWarehouse   = flag.Int("tpcc-warehouse", 1000, "tpcc warehouse count")
	tpccConnections = flag.Int("tpcc-connections", 64, "tpcc connections count")
	tpccWarmupTime  = flag.Int("tpcc-warmup-time", 30, "tpcc warmup time")
	tpccRunningTime = flag.Int("tpcc-running-time", 1800, "tpcc running time")
	tpccInterval    = flag.Int("tpcc-report-interval", 10, "tpcc report message interval time")
	tpccReportFile  = flag.String("tpcc-report-file", "", "tpcc report file")

	cmd           = flag.String("command", "run", "[prepare] [run] [clean]")
	mysqlHost     = flag.String("mysql-host", "127.0.0.1", "mysql Host, used to store result")
	mysqlPort     = flag.Int("mysql-port", 3306, "mysql port, used to store result")
	mysqlUser     = flag.String("mysql-user", "root", "mysql user, used to store result")
	mysqlPassword = flag.String("mysql-password", "root", "mysql password, used to store result")
	mysqlDb       = flag.String("mysql-database", "benchresult", "mysql database, used to store result")

	tidbVersion = os.Getenv("TIDB_VERSION")
	tikvVersion = os.Getenv("TIKV_VERSION")
	pdVersion   = os.Getenv("PD_VERSION")
)

func main() {
	flag.Parse()

	tpccCfg := &tpcc.TpccConfig{
		TiDBCfg: &tpcc.TiDBConfig{
			Host:     *host,
			Port:     *port,
			User:     *user,
			Password: *password,
			Database: *database,
			CreateDB: *createDB,
		},
		Warehouse:   *tpccWarehouse,
		Connections: *tpccConnections,
		WarmupTime:  *tpccWarmupTime,
		RunningTime: *tpccRunningTime,
		Interval:    *tpccInterval,
		ReportFile:  *tpccReportFile,
	}

	switch *cmd {
	case "prepare":
		err := tpcc.Prepare(tpccCfg)
		if err != nil {
			log.Fatalf("tpcc prepare data failed: %v", err)
		}
	case "run":
		err, _ := tpcc.Run(tpccCfg)
		if err != nil {
			log.Fatalf("tpcc run failed: %v", err)
		}

	case "clean":
	default:
		log.Fatal("cmd is wrong")
	}
}
