package main

import (
	"fmt"
	"os"
	"validate/flow"
	"validate/util"
)

func main() {
	_, err := util.NewLogger("")
	if err != nil {
		fmt.Printf("Failed to open a logger to write logs, exit.")
		os.Exit(-1)
	}

	util.Logger.Printf("Cluster Migration Running.")

	if len(os.Args) < 2 {
		util.Logger.Fatalf("you must pass the command on the TiDB Cluster")
	}

	allCommands := []flow.ClusterMigrationSubCommand{
		flow.EstimatePrimaryCommand(),
		flow.MakeupDownstreamCommand(),
		flow.VerifyDownstreamCommand(),
		flow.ShowAllStepsCommand(),
		flow.HelpCommand(),
	}

	subCommand := os.Args[1]
	for _, cmd := range allCommands {
		if cmd.Name() == subCommand {
			if err := cmd.Init(os.Args[2:]); err != nil {
				util.Logger.Fatalf("%s", err)
			}
			if err := cmd.Execute(); err != nil {
				util.Logger.Fatalf("%s", err)
			}

			return
		}
	}

	util.Logger.Fatalf("Unknown sub-command: %s", subCommand)
}
