package cmd

import (
	"errors"
	"fmt"
	"io"

	"github.com/spf13/cobra"
)

// Version is the clinic CLI version string.
// It defaults to "dev" and can be overridden at build time via -ldflags -X.
var Version = "dev"

func versionCommandHandler(_ *RuntimeContext, args []string, stdout io.Writer) error {
	command := newVersionCommand(stdout)
	if err := executeCobraCommand(command, args); err != nil {
		unknown, target, ok := parseUnknownCommandError(err)
		if ok && target == "version" && unknown != "" {
			return errors.New("version does not accept arguments")
		}
		return err
	}
	return nil
}

func newVersionCommand(stdout io.Writer) *cobra.Command {
	command := newCommand(commandMetadata{
		Use:   "version",
		Short: "Show clinic CLI version information.",
		Long: `Show clinic CLI version information.

Output:
  Plain-text version string.`,
	}, stdout)
	command.Args = cobra.NoArgs
	command.RunE = func(_ *cobra.Command, _ []string) error {
		_, err := fmt.Fprintln(stdout, Version)
		return err
	}
	return command
}
