package main

import (
	"context"
	"flag"
	"path"
	"runtime"

	"go.skia.org/infra/go/common"
	"go.skia.org/infra/go/gce"
	"go.skia.org/infra/go/sklog"
)

const (
	IMAGE_DESCRIPTION = "Base image for Skia Swarming bots."
	IMAGE_FAMILY      = "skia-swarming-base"
	INSTANCE_NAME     = "skia-swarming-base-maker"
	SETUP_SCRIPT      = "~/setup_script.sh"
)

var (
	// Flags.
	internal = flag.Bool("internal", false, "Whether to create an image for internal bots.")
)

func BaseConfig(serviceAccount string) *gce.Instance {
	_, filename, _, _ := runtime.Caller(0)
	dir := path.Dir(filename)

	vm := &gce.Instance{
		BootDisk: &gce.Disk{
			Name:        INSTANCE_NAME,
			SourceImage: "projects/debian-cloud/global/images/debian-9-stretch-v20180401",
			Type:        gce.DISK_TYPE_PERSISTENT_STANDARD,
		},
		MachineType: gce.MACHINE_TYPE_STANDARD_4,
		Name:        INSTANCE_NAME,
		Os:          gce.OS_LINUX,
		Scopes: []string{
			"https://www.googleapis.com/auth/cloud-platform",
		},
		ServiceAccount: serviceAccount,
		SetupScript:    path.Join(dir, "setup-script.sh"),
		User:           gce.USER_CHROME_BOT,
	}

	return vm
}

func main() {
	common.Init()

	// Create the GCloud object.
	project := gce.PROJECT_ID_SWARMING
	serviceAccount := gce.SERVICE_ACCOUNT_CHROMIUM_SWARM
	if *internal {
		project = gce.PROJECT_ID_SERVER
		serviceAccount = gce.SERVICE_ACCOUNT_DEFAULT
	}
	g, err := gce.NewLocalGCloud(project, gce.ZONE_DEFAULT)
	if err != nil {
		sklog.Fatal(err)
	}
	if err := g.CheckSsh(); err != nil {
		sklog.Fatal(err)
	}

	vm := BaseConfig(serviceAccount)

	// Delete the instance if it already exists, to ensure that we're in a
	// clean state.
	if err := g.Delete(vm, true, true); err != nil {
		sklog.Fatal(err)
	}

	// Create/Setup the instance.
	if err := g.CreateAndSetup(context.Background(), vm, false); err != nil {
		sklog.Fatal(err)
	}

	// Capture the image.
	if err := g.CaptureImage(vm, IMAGE_FAMILY, IMAGE_DESCRIPTION); err != nil {
		sklog.Fatal(err)
	}
}
