// Package cmd : Parse les arguments

// Arguments : version ==> version d'OpenCloud
// Argument : projet ==> nom du projet
package cmd

import (
    "github.com/spf13/cobra"

    log "oc-deploy/log_wrapper"
)

var (
    context string
    version string
    modules []string
)


func cobraInstallCmd() *cobra.Command {
  return &cobra.Command{
    Use:   "install",
    Short: "install",
    Long: `deploy Charts`,
    Args: cobra.MaximumNArgs(0),
    RunE: func(cmd *cobra.Command, args []string) error {
      return InstallCmd(context, version, modules)
    },
    Example: "oc-deploy install --version 1.0 --context ex1",
  }
}

func cobraUninstallCmd() *cobra.Command{
  return &cobra.Command{
    Use:   "uninstall",
    Short: "undeploy",
    Long: `Undeploy`,
    Args: cobra.MaximumNArgs(0),
    RunE: func(cmd *cobra.Command, args []string) error {
      return UninstallCmd(context)
    },
    Example: "oc-deploy uninstall --context ex1",
  }
}


func cobraGenerateCmd() *cobra.Command{
  return &cobra.Command{
    Use:   "generate",
    Short: "generate",
    Long: "Value",
    Args: cobra.MaximumNArgs(0),
    RunE: func(cmd *cobra.Command, args []string) error {
        return GenerateCmd(context, version)
    },
    Example: "oc-deploy generate --version 1.0 --context ex1",
  }
}

func Execute() {

    log.Log().Debug().Msg("Execute")

    var rootCmd = &cobra.Command{Use: "oc-deploy"}

    var cmdInstall = cobraInstallCmd()
    var cmdUninstall = cobraUninstallCmd()
    var cmdGenerate = cobraGenerateCmd()

    cmdInstall.Flags().StringVarP(&context, "context", "c", "opencloud", "Nom du context")
    cmdInstall.Flags().StringVarP(&version, "version", "v", "latest", "Version")
    cmdInstall.Flags().StringArrayVarP(&modules, "modules", "m", []string{}, "modules, ...")

    cmdUninstall.Flags().StringVarP(&context, "context", "c", "opencloud", "Nom du context")

    cmdGenerate.Flags().StringVarP(&context, "context", "c", "opencloud", "Nom du context")
    cmdGenerate.Flags().StringVarP(&version, "version", "v", "latest", "Version")

    rootCmd.AddCommand(cmdInstall)
    rootCmd.AddCommand(cmdUninstall)
    rootCmd.AddCommand(cmdGenerate)

    cobra.CheckErr(rootCmd.Execute())

}