package inbox

import (
	"github.com/spf13/cobra"
)

type rootOptions struct {
	dbPath string
	json   bool
	agent  string
}

func NewRootCmd() *cobra.Command {
	opts := &rootOptions{}

	cmd := &cobra.Command{
		Use:           "inbox",
		Short:         "Worker-facing durable coordination bus",
		SilenceErrors: true,
		SilenceUsage:  true,
	}

	cmd.PersistentFlags().StringVar(&opts.dbPath, "db", ".agents/coord.db", "SQLite database path")
	cmd.PersistentFlags().BoolVar(&opts.json, "json", false, "Emit machine-readable JSON")
	cmd.PersistentFlags().StringVar(&opts.agent, "agent", "", "Agent identity")

	cmd.AddCommand(newInitCmd(opts))
	cmd.AddCommand(newSendCmd(opts))
	cmd.AddCommand(newFetchCmd(opts))
	cmd.AddCommand(newClaimCmd(opts))
	cmd.AddCommand(newRenewCmd(opts))
	cmd.AddCommand(newUpdateCmd(opts))
	cmd.AddCommand(newReplyCmd(opts))
	cmd.AddCommand(newDoneCmd(opts))
	cmd.AddCommand(newFailCmd(opts))
	cmd.AddCommand(newCancelCmd(opts))
	cmd.AddCommand(newListCmd(opts))
	cmd.AddCommand(newWatchCmd(opts))
	cmd.AddCommand(newWaitReplyCmd(opts))
	cmd.AddCommand(newShowCmd(opts))

	return cmd
}
