package cli

import (
	
	
	
	

	
)

const pVersion = "version"

// RootParams are params for the root command.
type RootParams struct {
	// Version - print version
	Version bool
}

func ( *cobra.Command,  []string) RootParams {
	,  := .Flags().GetBool(pVersion)

	return RootParams{
		Version: ,
	}
}

// TODO move to /internal
func () string {
	,  := debug.ReadBuildInfo()
	if ! {
		return "(devel)"
	}

	 := .Main.Version
	if  == "" {
		return "(devel)"
	}

	return 
}

// ///// ///// /////

// ///// GRAFANA

// ///// ///// /////

const (

	// grafana

	pGIds             = "ids"
	pGIdsShort        = "i"
	pGGrafanaUrl      = "grafana-url"
	pGGrafanaUrlShort = "g"
	pGName            = "name"
	pGNameShort       = "n"
	pGFolder          = "folder"
	pGFolderShort     = "f"
	pGSource          = "source"
	pGSourceShort     = "s"
)

func ( *cobra.Command) {
	 := .Flags()
	.StringP(pGIds, pGIdsShort, "",
		"Machines IDs (comma separated). Required.")
	.StringP(pGGrafanaUrl, pGGrafanaUrlShort, "",
		"Grafana URL to sync. Requires GRAFANA_TOKEN in CWD/.env")
	.StringP(pGFolder, pGFolderShort, "",
		"Dashboard folder. Optional. Requires --"+pGGrafanaUrl)
	.StringP(pGName, pGNameShort, "",
		"Dashboard name. Required.")
	.StringP(pGSource, pGSourceShort, "",
		"$source variable (service_name or job). Required.")

}

// GrafanaParams are params for the grafana command.
type GrafanaParams struct {
	Ids        string
	GrafanaUrl string
	Folder     string
	Name       string
	Token      string
	Source     string
	// TODO interval
	// Interval   string
}

func ( *cobra.Command,  []string) GrafanaParams {
	 := strings.Trim(.Flag(pGIds).Value.String(), "\n ")
	 := strings.Trim(.Flag(pGGrafanaUrl).Value.String(), "\n ")
	 := strings.Trim(.Flag(pGFolder).Value.String(), "\n ")
	 := strings.Trim(.Flag(pGName).Value.String(), "\n ")
	 := strings.Trim(.Flag(pGSource).Value.String(), "\n ")

	if  == "" || strings.Contains(, " ") || strings.Contains(, ",,") {
		fmt.Println("Error: ids invalid")
		os.Exit(1)
	}

	if  == "" || strings.Contains(, " ") {
		fmt.Println("Error: sync invalid")
		os.Exit(1)
	}

	if  == "" || strings.Contains(, " ") {
		fmt.Println("Error: name invalid")
		os.Exit(1)
	}

	if  == "" || strings.Contains(, " ") {
		fmt.Println("Error: source invalid")
		os.Exit(1)
	}

	return GrafanaParams{
		Ids:        ,
		GrafanaUrl: ,
		Folder:     ,
		Name:       ,
		Source:     ,
	}
}

// ///// ///// /////

// ///// STATES FILE

// ///// ///// /////

// TODO validate param
// var inherits = []string{"basic", "connected", "rpc/worker", "node/worker"}

// SFParams are params for the states-file command.
type SFParams struct {
	// Version - print version
	Version bool
	// States - State names to generate. Eg: State1,State2
	States string
	// Inherit - Inherit from built-in states machines (comma separated):
	// - basic,connected
	// - rpc/worker
	// - node/worker
	Inherit string
	// Groups - Groups to generate. Eg: Group1,Group2
	Groups string
	// Name - Name of the state machine.
	Name string
	// Force - Overwrite existing files.
	Force bool
	// Utils - Generate states_utils.go in CWD. Overrides files.
	Utils bool
}

const (

	// states-file

	pSFStates       = "states"
	pSFStatesShort  = "s"
	pSFInherit      = "inherit"
	pSFInheritShort = "i"
	pSFGroups       = "groups"
	pSFGroupsShort  = "g"
	pSFName         = "name"
	pSFNameShort    = "n"
	pSFForce        = "force"
	pSFForceShort   = "f"
	pSFUtils        = "utils"
	pSFUtilsShort   = "u"
)

func ( *cobra.Command) {
	 := .Flags()
	.StringP(pSFStates, pSFStatesShort, "",
		"State names to generate. Eg: State1,State2")
	.StringP(pSFInherit, pSFInheritShort, "",
		"Inherit from a built-in states machine: " +
		"basic,connected,rpc/worker,node/worker")
	.StringP(pSFGroups, pSFGroupsShort, "",
		"Groups to generate. Eg: Group1,Group2")
	.StringP(pSFName, pSFNameShort, "",
		"Name of the state machine. Eg: MyMach")
	.BoolP(pSFUtils, pSFUtilsShort, true,
		"Generate states_utils.go in CWD. Overrides files.")
	.Bool(pVersion, false,
		"Print version and exit")
	.BoolP(pSFForce, pSFForceShort, false,
		"Override output file (if any)")
}

func ( *cobra.Command,  []string) SFParams {

	 := strings.Trim(.Flag(pSFStates).Value.String(), "\n ")
	 := strings.Trim(.Flag(pSFInherit).Value.String(), "\n ")
	 := strings.Trim(.Flag(pSFGroups).Value.String(), "\n ")
	 := strings.Trim(.Flag(pSFName).Value.String(), "\n ")
	,  := .Flags().GetBool(pSFForce)
	,  := .Flags().GetBool(pSFUtils)

	if  == "" || strings.Contains(, " ") ||
		strings.Contains(, ",,") {
		fmt.Println("Error: states invalid")
		os.Exit(1)
	}

	if strings.Contains(, " ") || strings.Contains(, ",,") {
		fmt.Println("Error: groups invalid")
		os.Exit(1)
	}

	if strings.Contains(, " ") || strings.Contains(, ",,") {
		fmt.Println("Error: inherit invalid")
		os.Exit(1)
	}

	if  == "" || strings.Contains(, " ") {
		fmt.Println("Error: name invalid")
		os.Exit(1)
	}

	return SFParams{
		// Version: version,
		States:  ,
		Inherit: ,
		Groups:  ,
		Name:    ,
		Force:   ,
		Utils:   ,
	}
}