package main

import (
	"flag"
	"fmt"
	"github.com/maxlinc/gophercloud"
)

var region, serverName, imageRef, flavorRef *string
var adminPass = flag.String("a", "", "Administrator password (auto-assigned if none)")
var quiet = flag.Bool("quiet", false, "Quiet mode for acceptance tests.  $? non-zero if error.")

func configure() {
	region = flag.String("r", "", "Region in which to create the server.  Leave blank for provider-default region.")
	serverName = flag.String("n", randomString("ACPTTEST--", 16), "Server name (what you see in the control panel)")
	imageRef = flag.String("i", "", "ID of image to deploy onto the server")
	flavorRef = flag.String("f", "", "Flavor of server to deploy image upon")

	flag.Parse()
}

func main() {
	configure()

	withIdentity(false, func(auth gophercloud.AccessProvider) {
		withServerApi(auth, func(servers gophercloud.CloudServersProvider) {
			_, err := createServer(servers, *imageRef, *flavorRef, *serverName, *adminPass)
			if err != nil {
				panic(err)
			}

			allServers, err := servers.ListServers()
			if err != nil {
				panic(err)
			}

			if !*quiet {
				fmt.Printf("ID,Name,Status,Progress\n")
				for _, i := range allServers {
					fmt.Printf("%s,\"%s\",%s,%d\n", i.Id, i.Name, i.Status, i.Progress)
				}
			}
		})
	})
}
