package cli

import (
	"os"

	"git.eeqj.de/sneak/secret/internal/secret"
	"github.com/spf13/cobra"
)

// CLIEntry is the entry point for the secret CLI application
func CLIEntry() {
	cmd := newRootCmd()
	if err := cmd.Execute(); err != nil {
		os.Exit(1)
	}
}

func newRootCmd() *cobra.Command {
	secret.Debug("newRootCmd starting")
	cmd := &cobra.Command{
		Use:   "secret",
		Short: "A simple secrets manager",
		Long:  `A simple secrets manager to store and retrieve sensitive information securely.`,
		// Ensure usage is shown after errors
		SilenceUsage:  false,
		SilenceErrors: false,
	}

	secret.Debug("Adding subcommands to root command")
	// Add subcommands
	cmd.AddCommand(newInitCmd())
	cmd.AddCommand(newGenerateCmd())
	cmd.AddCommand(newVaultCmd())
	cmd.AddCommand(newAddCmd())
	cmd.AddCommand(newGetCmd())
	cmd.AddCommand(newListCmd())
	cmd.AddCommand(newUnlockersCmd())
	cmd.AddCommand(newUnlockerCmd())
	cmd.AddCommand(newImportCmd())
	cmd.AddCommand(newEncryptCmd())
	cmd.AddCommand(newDecryptCmd())
	cmd.AddCommand(newVersionCmd())

	secret.Debug("newRootCmd completed")
	return cmd
}
