package initcmd

import (
	"fmt"

	"sunhpc/internal/auth"
	"sunhpc/internal/config"
	"sunhpc/internal/system"

	"github.com/spf13/cobra"
)

var (
	dryRun  bool // --dry-run -n: 仅模拟执行，不实际应用
	verbose bool // --verbose -v: 启用详细日志输出
)

var systemCmd = &cobra.Command{
	Use:   "system [flags]",
	Short: "根据配置文件初始化系统",
	Long: `读取 /etc/sunhpc/sunhpc.yaml 中的系统配置项并应用到当前节点。
	示例:
		sunhpc init system            # 应用所有配置项
		sunhpc init system --dry-run  # 仅模拟执行，不实际应用
		sunhpc init system --verbose  # 启用详细日志输出
	`,
	RunE: func(cmd *cobra.Command, args []string) error {
		// 权限检查：必须以 root 或 sudo 运行
		if err := auth.RequireRoot(); err != nil {
			return err
		}

		// 加载主配置
		cfg, err := config.LoadSunHPC()
		if err != nil {
			return fmt.Errorf("加载 sunhpc.yaml 失败: %v", err)
		}

		// 统一应用所有配置
		return system.ApplyAll(cfg)
	},
}

// init 初始化 systemCmd 的标志,添加长参数和段参数.
func init() {
	// 注册长参数, 布尔参数
	systemCmd.Flags().BoolVarP(&dryRun, "dry-run", "n", false, "仅模拟执行，不实际应用")
	systemCmd.Flags().BoolVarP(&verbose, "verbose", "v", false, "启用详细日志输出")
}
