package main

import (
	"strings"

	"github.com/containers/libpod/cmd/podman/cliconfig"
	"github.com/spf13/cobra"
)

var (
	imageDescription = "Manage images"
	imageCommand     = cliconfig.PodmanCommand{
		Command: &cobra.Command{
			Use:   "image",
			Short: "Manage images",
			Long:  imageDescription,
			RunE:  commandRunE(),
		},
	}
	imagesSubCommand  cliconfig.ImagesValues
	_imagesSubCommand = &cobra.Command{
		Use:     strings.Replace(_imagesCommand.Use, "images", "list", 1),
		Short:   _imagesCommand.Short,
		Long:    _imagesCommand.Long,
		Aliases: []string{"ls"},
		RunE: func(cmd *cobra.Command, args []string) error {
			imagesSubCommand.InputArgs = args
			imagesSubCommand.GlobalFlags = MainGlobalOpts
			return imagesCmd(&imagesSubCommand)
		},
		Example: strings.Replace(_imagesCommand.Example, "podman images", "podman image list", -1),
	}

	inspectSubCommand  cliconfig.InspectValues
	_inspectSubCommand = &cobra.Command{
		Use:   strings.Replace(_inspectCommand.Use, "CONTAINER | ", "", 1),
		Short: "Display the configuration of an image",
		Long:  `Displays the low-level information on an image identified by name or ID.`,
		RunE: func(cmd *cobra.Command, args []string) error {
			inspectSubCommand.InputArgs = args
			inspectSubCommand.GlobalFlags = MainGlobalOpts
			return inspectCmd(&inspectSubCommand)
		},
		Example: `podman image inspect alpine`,
	}

	rmSubCommand  cliconfig.RmiValues
	_rmSubCommand = &cobra.Command{
		Use:   strings.Replace(_rmiCommand.Use, "rmi", "rm", 1),
		Short: _rmiCommand.Short,
		Long:  _rmiCommand.Long,
		RunE: func(cmd *cobra.Command, args []string) error {
			rmSubCommand.InputArgs = args
			rmSubCommand.GlobalFlags = MainGlobalOpts
			return rmiCmd(&rmSubCommand)
		},
		Example: strings.Replace(_rmiCommand.Example, "podman rmi", "podman image rm", -1),
	}
)

//imageSubCommands are implemented both in local and remote clients
var imageSubCommands = []*cobra.Command{
	_buildCommand,
	_historyCommand,
	_imagesSubCommand,
	_imageExistsCommand,
	_importCommand,
	_inspectSubCommand,
	_loadCommand,
	_pruneImagesCommand,
	_pullCommand,
	_pushCommand,
	_rmSubCommand,
	_saveCommand,
	_tagCommand,
	_treeCommand,
}

func init() {
	rmSubCommand.Command = _rmSubCommand
	rmiInit(&rmSubCommand)

	imagesSubCommand.Command = _imagesSubCommand
	imagesInit(&imagesSubCommand)

	inspectSubCommand.Command = _inspectSubCommand
	inspectInit(&inspectSubCommand)

	imageCommand.SetUsageTemplate(UsageTemplate())
	imageCommand.AddCommand(imageSubCommands...)
	imageCommand.AddCommand(getImageSubCommands()...)

}
