// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package main

import (
	"log"
	"os"

	"github.com/maruel/subcommands"
	"go.chromium.org/luci/auth"
	"go.chromium.org/luci/auth/client/authcli"
	"go.chromium.org/luci/client/versioncli"
	"go.chromium.org/luci/hardcoded/chromeinfra"
)

const (
	// Version must be updated on functional change (behavior, arguments, supported commands).
	version = "0.0.1"
)

func getApplication(defaultAuthOpts auth.Options) *subcommands.DefaultApplication {
	defaultAuthOpts.Scopes = []string{
		"https://www.googleapis.com/auth/devstorage.read_write",
		"https://www.googleapis.com/auth/userinfo.email",
	}
	return &subcommands.DefaultApplication{
		Name:  "gcs-util",
		Title: "Client for interacting with GCS.",
		Commands: []*subcommands.Command{
			cmdUp(defaultAuthOpts),
			cmdVerifyBlobs(),
			authcli.SubcommandInfo(defaultAuthOpts, "whoami", false),
			authcli.SubcommandLogin(defaultAuthOpts, "login", false),
			authcli.SubcommandLogout(defaultAuthOpts, "logout", false),
			versioncli.CmdVersion(version),
			subcommands.CmdHelp,
		},
	}
}

func main() {
	log.SetFlags(log.Lmicroseconds)
	app := getApplication(chromeinfra.DefaultAuthOptions())
	os.Exit(subcommands.Run(app, nil))
}
