package cli

import (
	initcmd "sunhpc/internal/cli/init"
	"sunhpc/pkg/config"
	"sunhpc/pkg/logger"

	"github.com/spf13/cobra"
	"github.com/spf13/viper"
)

var (
	cfgFile string
	verbose bool
	noColor bool
)

func NewRootCmd() *cobra.Command {
	cmd := &cobra.Command{
		Use:   "sunhpc",
		Short: "SunHPC - HPC集群一体化运维工具",
		PersistentPreRun: func(cmd *cobra.Command, args []string) {
			// 加载全局配置(只加载一次)
			cfg, err := config.LoadConfig()
			if err != nil {
				// 配置加载失败，使用默认日志配置初始化
				logger.Warnf("加载配置失败,使用默认日志配置: %v", err)
				logger.Init(logger.LogConfig{})
				return
			}

			// 3. 初始化全局日志(全局只执行一次)
			logger.Init(logger.LogConfig{
				Verbose:   cfg.Log.Verbose,
				ShowColor: !cfg.Log.ShowColor,
				LogFile:   cfg.Log.LogFile,
			})
		},

		Run: func(cmd *cobra.Command, args []string) {
			cmd.Help()
		},
	}

	cmd.PersistentFlags().StringVarP(
		&config.CLIParams.Config,
		"config", "c",
		"", "配置文件路径 (默认:/etc/sunhpc/config.yaml)")

	cmd.PersistentFlags().BoolVarP(
		&config.CLIParams.Verbose,
		"verbose", "v", false, "启用详细日志输出")

	cmd.PersistentFlags().BoolVar(
		&config.CLIParams.NoColor,
		"no-color", false, "禁用彩色输出")

	// 如果指定了 --config 参数，优先使用该配置文件
	if config.CLIParams.Config != "" {
		viper.SetConfigFile(config.CLIParams.Config)
	}

	cmd.AddCommand(initcmd.NewInitCmd())
	return cmd
}

func Execute() error {
	return NewRootCmd().Execute()
}
