package main

/* 
	This simply parses the command line arguments using the default golang
	package called 'flag'. This can be used as a simple template to parse
	command line arguments in other programs.

	It puts everything in the 'config' package which I think is a good
	wrapper around the 'flags' package and doesn't need a whole mess of
	global variables
*/

import "log"
import "os"
import "flag"
import "fmt"
import "github.com/gookit/config"
import "github.com/gookit/config/yaml"

var customUsage = func() {
	fmt.Fprintf(flag.CommandLine.Output(), "Usage of %s:\n", os.Args[0])
	flag.PrintDefaults()

	fmt.Println("")
	fmt.Println("EXAMPLES:")
	fmt.Println("")
	fmt.Println(os.Args[0] + "--hostname test.hostname.wit.com")
	fmt.Println("")
}

func parseFlags() {
	var version       string
	var race          bool
	var hostname      string
	var width         int
	var height        int

	flag.StringVar  (&version,       "version",       "v0.1",       "Set compiled in version string")

	flag.StringVar  (&hostname,      "hostname",      "localhost",  "Your full hostname")
	flag.IntVar     (&width,         "width",         400,          "Width of the Window")
	flag.IntVar     (&height,        "height",        600,          "Height of the Window")

	flag.BoolVar    (&race,          "race",          race,         "Use race detector")

	// Set the output if something fails to stdout rather than stderr
	flag.CommandLine.SetOutput(os.Stdout)

	flag.Usage = customUsage
	flag.Parse()

	if flag.Parsed() {
		log.Println("flag.Parse() worked")
	} else {
		log.Println("flag.Parse() failed")
	}

	config.Set("width", width)
	config.Set("height", height)
	config.Set("hostname", hostname)
}

func parseConfig() {
	config.WithOptions(config.ParseEnv)
	parseFlags()

	config.LoadOSEnv([]string{"MAIL"})
	config.LoadOSEnv([]string{"USER"})
	config.LoadOSEnv([]string{"BUILDDEBUG"})

/*
	urls := flag.Args()
	log.Println("flag.Aargs() = ", urls)

	for _, addr := range flag.Args() {
		log.Println("GET %s", addr)
	}
*/

	// add driver for support yaml content
	config.AddDriver(yaml.Driver)
	config.LoadFiles("config.yml")

	for _, addr := range config.Strings("arr1") {
		log.Println("addr =", addr)
	}

}