package genautocomplete

import (
	"fmt"
	"os"

	"github.com/rclone/rclone/cmd"
	"github.com/rclone/rclone/fs"
	"github.com/spf13/cobra"
)

func init() {
	completionDefinition.AddCommand(fishCommandDefinition)
}

var fishCommandDefinition = &cobra.Command{
	Use:   "fish [output_file]",
	Short: `Output fish completion script for rclone.`,
	Long: `Generates a fish autocompletion script for rclone.

This writes to /etc/fish/completions/rclone.fish by default so will
probably need to be run with sudo or as root, e.g.

` + "```console" + `
sudo rclone completion fish
` + "```" + `

Logout and login again to use the autocompletion scripts, or source
them directly

` + "```console" + `
. /etc/fish/completions/rclone.fish
` + "```" + `

If you supply a command line argument the script will be written
there.

If output_file is "-", then the output will be written to stdout.`,
	Run: func(command *cobra.Command, args []string) {
		cmd.CheckArgs(0, 1, command, args)
		out := "/etc/fish/completions/rclone.fish"
		if len(args) > 0 {
			if args[0] == "-" {
				err := cmd.Root.GenFishCompletion(os.Stdout, true)
				if err != nil {
					fs.Fatal(nil, fmt.Sprint(err))
				}
				return
			}
			out = args[0]
		}
		err := cmd.Root.GenFishCompletionFile(out, true)
		if err != nil {
			fs.Fatal(nil, fmt.Sprint(err))
		}
	},
}
