// {{.Name}} - {{.Desc}}
// 
// {{.Text}}

package {{$.PackageName}}

{{template "header" $ }}

import (
//  	"fmt"
//  	"os"

//  	"github.com/go-easygen/go-flags"
)

// Template for main starts here

//////////////////////////////////////////////////////////////////////////
// Constant and data type/structure definitions

////////////////////////////////////////////////////////////////////////////
// Global variables definitions

//  var (
//          progname  = "{{.Name}}"
//          version   = "0.1.0"
//          date = "{{ date "I" }}"

//  	// opts store all the configurable options
//  	opts optsT
//  )
//  
//  var gfParser = flags.NewParser(&opts, flags.Default)

////////////////////////////////////////////////////////////////////////////
// Function definitions

//==========================================================================
// Function main
//  func main() {
{{- if .Version }}
//  	opts.Version = showVersion
{{- end }}
{{- if .Verbose }}
//  	opts.Verbflg = func() {
//  		opts.Verbose++
//  	}
{{- end }}
//  
//  	if _, err := gfParser.Parse(); err != nil {
//  		fmt.Println()
//  		gfParser.WriteHelp(os.Stdout)
//  		os.Exit(1)
//  	}
//  	fmt.Println()
//  	//Do{{stringsTitle .Name}}()
//  }
//
//  //==========================================================================
//  // support functions
//  
{{- if .Version }}
//  func showVersion() {
//   	fmt.Fprintf(os.Stderr, "{{.Name}} - {{.Desc}}, version %s\n", version)
//  	fmt.Fprintf(os.Stderr, "Built on %s\n", date)
//   	fmt.Fprintf(os.Stderr, "Copyright (C) {{$.Since}}-{{ date "Y4" }}, {{or $.Authors "The Author(s) <they@their.org>"}}\n\n")
//  	fmt.Fprintf(os.Stderr, "{{.Text}}\n")
//  	os.Exit(0)
//  }
{{- end }}
// Template for main ends here

// Do{{stringsTitle .Name}} implements the business logic of command `{{.Name}}`
//  func Do{{stringsTitle .Name}}() error {
//  	return nil
//  }

// Template for type define starts here

{{template "type_struct" argsm "ProgramName" .ProgramName "Options" .Options "Verbose" .Verbose "Version" .Version "typeName" "optsT" "Prefix" "" }}
// Template for type define ends here

{{range .Command}}
// Template for "{{.Name}}" CLI handling starts here
{{template "header" $ }}

//  package {{$.PackageName}}

//  import (
//  	"fmt"
//  	"os"
//
//  	"github.com/go-easygen/go-flags/clis"
//  )

// *** Sub-command: {{.Name}} ***

////////////////////////////////////////////////////////////////////////////
// Constant and data type/structure definitions

{{template "type_struct" argsm "ProgramName" $.ProgramName "Options" .Options "typeName" (print (stringsTitle .Name) "Command") "Prefix" "//  " }}

//  
//  var {{.Name}}Command {{stringsTitle .Name}}Command
//  
//  ////////////////////////////////////////////////////////////////////////////
//  // Function definitions
//  
//  func init() {
//  	gfParser.AddCommand("{{.Name}}",
//  		"{{.Desc}}",
//  		"{{.Text}}",
//  		&{{.Name}}Command)
//  }
//
//  func (x *{{stringsTitle .Name}}Command) Execute(args []string) error {
//   	fmt.Fprintf(os.Stderr, "{{.Desc}}\n")
//   	// fmt.Fprintf(os.Stderr, "Copyright (C) {{$.Since}}-{{ date "Y4" }}, {{or $.Authors "The Author(s) <they@their.org>"}}\n\n")
//   	clis.Setup("{{$.Name}}::{{.Name}}", opts.Verbose)
//   	clis.Verbose(1, "Doing {{stringsTitle .Name}}, with %+v, %+v", opts, args)
//   	{{$opts := .Options}}// fmt.Println({{range $i, $opt := .Options}}x.{{$opt.Name}}{{if lt $i ($opts | len | minus1)}}, {{end}}{{end}})
//  	return x.Exec(args)
//  }
//  
// // Exec implements the business logic of command `{{.Name}}`
// func (x *{{stringsTitle .Name}}Command) Exec(args []string) error {
// 	// err := ...
// 	// clis.WarnOn("{{.Name}}::Exec", err)
// 	// or,
// 	// clis.AbortOn("{{.Name}}::Exec", err)
// 	return nil
// }
// Template for "{{.Name}}" CLI handling ends here
{{end}}

