/* 
  hadfield -- a basic subcommands package to complement flag.

    $ go get hawx.me/code/hadfield

*/

package main

import (
  "fmt"
  "os"

  "hawx.me/code/hadfield"
)

// Define each subcommand, name given by first word in Usage
var cmdGreet = &hadfield.Command{
  Usage: "greet [options]",
  Short: "displays a greeting",
  Long: `
  Greet displays a formatted greeting to a person in the language specified.

    --person <name>     # Name of person to greet
    --lang <en|fr>      # Language to use, English or French
`,
}

// Give it some behaviour
func runGreet(cmd *hadfield.Command, args []string) {
  switch greetLang {
  case "en":
    fmt.Println("Hello", greetPerson)
  case "fr":
    fmt.Println("Bonjour", greetPerson)
  default:
    os.Exit(2)
  }
}

var greetPerson, greetLang string

func init() {
  // Set the function to run and add some flags
  cmdGreet.Run = runGreet

  cmdGreet.Flag.StringVar(&greetPerson, "person", "someone?", "")
  cmdGreet.Flag.StringVar(&greetLang, "lang", "en", "")
}

// Write templates for the help screens using text/template
var templates = hadfield.Templates{
  Usage: `usage: example [command] [arguments]

  This is an example.

  Commands: {{range .}}
    {{.Name | printf "%-15s"}} # {{.Short}}{{end}}
`,
  Help: `usage: example {{.Usage}}
{{.Long}}
`,
}

var commands = hadfield.Commands{
  cmdGreet,
}

func main() {
  // Finally run hadfield
  hadfield.Run(commands, templates)
}