package main

import "go.wit.com/log"

/*
	this parses the command line arguements

	this enables command line options from other packages like 'gui' and 'log'
*/

var argv args

type DumpCmd struct {
	Droplets     bool `arg:"--droplets"                    help:"show the running droplets"`
	DropletsFull bool `arg:"--droplets-full"              help:"show all the known droplets"`
	Hypervisors  bool `arg:"--hypervisors"                help:"show the hypervisors"`
	Uptime       bool `arg:"--uptime"                help:"show the hypervisors"`
}

type CreateCmd struct {
	Filename string `arg:"--filename"                        help:"start a vm based off the qcow2 filename"`
	Memory   int    `arg:"--memory"                          help:"set the memory in MB"`
	Cpus     int    `arg:"--cpus"                            help:"set the cpus"`
}

type ImportXml struct {
	Xml        []string `arg:"--libvirt"                         help:"import qemu xml files: --libvirt /etc/libvirt/qemu/*.xml"`
	IgnoreCpu  bool     `arg:"--xml-ignore-cpu"  default:"true"  help:"ignore non-standard libvirt xml cpus"`
	IgnoreBr   bool     `arg:"--xml-ignore-net"  default:"true"  help:"ignore network bridge name changes"`
	IgnDisk    bool     `arg:"--xml-ignore-disk" default:"false" help:"ignore duplicate disk names"`
	DomainName string   `arg:"--domain"                          help:"the virsh domain name"`
	Host       string   `arg:"--host"                            help:"the hypervisor hostname (optional)"`
	Delete     bool     `arg:"--delete"          default:"false" help:"delete the old xml after import"`
	Force      bool     `arg:"--force"           default:"false" help:"attempts to merge xml with existing protobuf"`
}

type args struct {
	Start []string `arg:"--start"                           help:"droplets to start"`
	Port  int      `arg:"--port"            default:"8080"  help:"allow droplet events via http"`

	Create *CreateCmd `arg:"subcommand:create" help:"create a new droplet"`
	Dump   *DumpCmd   `arg:"subcommand:dump"   help:"show the state of the cluster"`
	Import *ImportXml `arg:"subcommand:import" help:"import libvirt XML"`
}

func (a args) Description() string {
	return `
   virtigoctl command line configure and control for virtigo
`
}

func (args) Epilogue() string {
	return `
   This will start three already defined servers:

       virtigoctl --start www.wit.com ftp.wit.com wiki.wit.com

   This will make a new vm called "foo.wit.com" with the default
   virtigo values for memory, cpus, network settings, spice, etc.

       virtigoctl create --filename /home/nfs/foo.wit.com.qcow2

   create "bar.wit.com" with defaults except 1GB of RAM:

       virtigoctl create --filename /home/nfs/bar.wit.com.qcow2 --memory 1024
`
}

func (args) Version() string {
	return "virtigoctl " + Version
}

var INFO *log.LogFlag
var POLL *log.LogFlag
var WARN *log.LogFlag
var SPEW *log.LogFlag
var EVENT *log.LogFlag

func init() {
	full := "go.wit.com/apps/virtigoctl"
	short := "virtigoctl"

	INFO = log.NewFlag("INFO", false, full, short, "general virtigo")
	POLL = log.NewFlag("POLL", false, full, short, "virtigo polling")
	WARN = log.NewFlag("WARN", true, full, short, "bad things")
	SPEW = log.NewFlag("SPEW", true, full, short, "dump everything")
	EVENT = log.NewFlag("EVENT", true, full, short, "hypeprvisor/droplet events")
}