package cpa

import (
	"fmt"
	"strings"

	coremodule "ops-assistant/internal/core/module"
	"ops-assistant/internal/core/runbook"
)

func commandSpecs() []coremodule.CommandSpec {
	return []coremodule.CommandSpec{
		{
			Prefixes: []string{"/cpa status"},
			Template: coremodule.CommandTemplate{
				RunbookName: "cpa_status",
				Gate:        coremodule.Gate{AllowDryRun: true},
				DryRunMsg:   "🧪 dry-run: 将执行 /cpa status（未实际执行）",
				SuccessMsg:  func(jobID uint) string { return fmt.Sprintf("✅ /cpa status 已执行，job=%d", jobID) },
			},
			ErrPrefix: "/cpa status 执行失败: ",
		},
		{
			Prefixes: []string{"/cpa usage backup"},
			Template: coremodule.CommandTemplate{
				RunbookName: "cpa_usage_backup",
				Gate:        coremodule.Gate{AllowDryRun: true},
				DryRunMsg:   "🧪 dry-run: 将执行 /cpa usage backup（未实际执行）",
				SuccessMsg:  func(jobID uint) string { return fmt.Sprintf("✅ /cpa usage backup 已执行，job=%d", jobID) },
			},
			ErrPrefix: "/cpa usage backup 执行失败: ",
		},
		{
			Prefixes: []string{"/cpa usage restore "},
			ErrHint:  "--confirm YES_RESTORE",
			Template: coremodule.CommandTemplate{
				RunbookName: "cpa_usage_restore",
				Gate:        coremodule.Gate{NeedFlag: "allow_ops_restore", RequireConfirm: true, ExpectedToken: "YES_RESTORE", AllowDryRun: true},
				InputsFn: func(_ string, parts []string) (map[string]string, error) {
					if len(parts) < 4 {
						return nil, fmt.Errorf("❌ 用法：/cpa usage restore <backup_id>")
					}
					backupID := strings.TrimSpace(parts[3])
					if backupID == "" {
						return nil, fmt.Errorf("❌ backup_id 不能为空")
					}
					return map[string]string{"backup_id": backupID}, nil
				},
				MetaFn: func(userID int64, confirmToken string, inputs map[string]string) runbook.RunMeta {
					meta := runbook.NewMeta()
					meta.Target = "hwsg"
					meta.RiskLevel = "high"
					meta.ConfirmHash = hashConfirmToken(confirmToken)
					return meta
				},
				DryRunMsg:  "🧪 dry-run: 将执行 restore（未实际执行）",
				SuccessMsg: func(jobID uint) string { return fmt.Sprintf("✅ /cpa usage restore 已执行，job=%d", jobID) },
			},
			ErrPrefix: "/cpa usage restore 执行失败: ",
		},
	}
}
