package container

import (
	"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags"
	"github.com/spf13/cobra"
)

// Cmd represents the container command.
var Cmd = &cobra.Command{
	Use:   "container",
	Short: "Operations with containers",
	Long:  "Operations with containers",
	PersistentPreRun: func(cmd *cobra.Command, _ []string) {
		// bind exactly that cmd's flags to
		// the viper before execution
		commonflags.Bind(cmd)
		commonflags.BindAPI(cmd)
	},
}

func init() {
	containerChildCommand := []*cobra.Command{
		listContainersCmd,
		createContainerCmd,
		deleteContainerCmd,
		listContainerObjectsCmd,
		getContainerInfoCmd,
		containerNodesCmd,
		policyPlaygroundCmd,
	}

	Cmd.AddCommand(containerChildCommand...)

	initContainerListContainersCmd()
	initContainerCreateCmd()
	initContainerDeleteCmd()
	initContainerListObjectsCmd()
	initContainerInfoCmd()
	initContainerNodesCmd()
	initContainerPolicyPlaygroundCmd()

	for _, containerCommand := range containerChildCommand {
		commonflags.InitAPI(containerCommand)
	}

	for _, el := range []struct {
		cmd  *cobra.Command
		verb string
	}{
		{createContainerCmd, "PUT"},
		{deleteContainerCmd, "DELETE"},
	} {
		commonflags.InitSession(el.cmd, "container "+el.verb)
	}
}