package initcmd

import (
	"fmt"
	"sunhpc/internal/middler/auth"
	"sunhpc/pkg/database"
	"sunhpc/pkg/logger"

	"github.com/spf13/cobra"
)

func NewInitDBCmd() *cobra.Command {
	var force bool

	cmd := &cobra.Command{
		Use:   "db",
		Short: "初始化数据库",
		Long: `初始化SQLite数据库,创建所有表结构和默认数据。
    
示例:
  sunhpc init db         # 初始化数据库
  sunhpc init db --force # 强制重新初始化`,
		RunE: func(cmd *cobra.Command, args []string) error {
			if err := auth.RequireRoot(); err != nil {
				return err
			}

			logger.Debug("执行数据库初始化...")

			// 初始化数据库
			db, err := database.GetDB()
			if err != nil {
				return fmt.Errorf("数据库连接失败: %w", err)
			}
			defer db.Close()

			if err := database.InitTables(db, force); err != nil {
				logger.Debug(err)
				return err
			}

			// 测试数据库连接
			if err := database.TestNodeInsert(db); err != nil {
				return fmt.Errorf("数据库测试失败: %w", err)
			}

			return nil
		},
	}

	cmd.Flags().BoolVarP(
		&force, "force", "f", false,
		"强制重新初始化")

	return cmd
}
