package actions

import (
	goflag "flag"
	"os"

	"cos.googlesource.com/cos/tools.git/src/pkg/kernel"
	"github.com/golang/glog"
	"github.com/spf13/cobra"
	flag "github.com/spf13/pflag"
)

var arch, build, board, configFile string
var useRegional bool
var staging bool

var rootCmd = &cobra.Command{
	Use:   "cos-kernel [action]",
	Short: "cos-kernel - Tool for interacting with the COS kernel",
	Long: `The cos-kernel tool performs common COS kernel development operations.

It supports workflows such as:
* Building a COS kernel from a local source tree.
* Building a COS kernel variant (e.g., lakitu-arm64, kselftest).
* Running arbitrary make commands using the COS toolchain.
* Downloading the COS C toolchain and kernel headers.
* Preparing patches for a new kernel feature.`,
	SilenceUsage: true,
	PersistentPreRun: func(cmd *cobra.Command, args []string) {
		if staging {
			os.Setenv("CLOUDSDK_API_CLIENT_OVERRIDES_COMPUTE", "staging_v1")
			os.Setenv("CLOUDSDK_CORE_DISABLE_WARNINGS", "1")
			kernel.GcloudExecutable = "/google/data/ro/teams/cloud-sdk/gcloud"
		}
	},
}

func addCommonFlags(flags *flag.FlagSet) {
	flags.StringVarP(&arch, "arch", "a", "",
		"the compiler architecture (e.g., x86_64, aarch64; defaults to the arch of the running kernel)")
	flags.StringVar(&build, "build", "",
		"the kernel build; this can be either a build number (e.g., 12345.01.02) or a branch (e.g., release-R117)")
	flags.StringVar(&board, "board", "",
		"the kernel board")
	flags.BoolVar(&useRegional, "use-regional-bucket", true,
		"use regional GCS buckets (e.g. cos-tools-us-central1) for downloading artifacts")
}

func init() {
	flag.CommandLine.AddGoFlagSet(goflag.CommandLine)
	rootCmd.PersistentFlags().BoolVar(&staging, "staging", false, "use gcloud staging")
}

func Execute() {
	if err := rootCmd.Execute(); err != nil {
		glog.Exitf("%v", err)
	}
}
