package main

import (
	"context"
	"fmt"
	"os"
	"os/signal"
	"syscall"

	logging "github.com/ipfs/go-log/v2"
	"github.com/urfave/cli/v2"
)

var root []*cli.Command = []*cli.Command{
	createSimCommand,
	deleteSimCommand,
	copySimCommand,
	renameSimCommand,
	listSimCommand,

	runSimCommand,
	infoSimCommand,
	upgradeCommand,
}

func main() {
	if _, set := os.LookupEnv("GOLOG_LOG_LEVEL"); !set {
		_ = logging.SetLogLevel("simulation", "DEBUG")
		_ = logging.SetLogLevel("simulation-mock", "DEBUG")
	}
	app := &cli.App{
		Name:      "lotus-sim",
		Usage:     "A tool to simulate a network.",
		Commands:  root,
		Writer:    os.Stdout,
		ErrWriter: os.Stderr,
		Flags: []cli.Flag{
			&cli.StringFlag{
				Name:    "repo",
				EnvVars: []string{"LOTUS_PATH"},
				Hidden:  true,
				Value:   "~/.lotus",
			},
			&cli.StringFlag{
				Name:    "simulation",
				Aliases: []string{"sim"},
				EnvVars: []string{"LOTUS_SIMULATION"},
				Value:   "default",
			},
		},
	}

	ctx, cancel := signal.NotifyContext(context.Background(),
		syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP)
	defer cancel()

	if err := app.RunContext(ctx, os.Args); err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s\n", err)
		os.Exit(1)
		return
	}
}