package metric

import "github.com/prometheus/client_golang/prometheus"

func init() {
	// Register all metrics with Prometheus
	prometheus.MustRegister(
		CreateBackupSettingActionFailuresTotal,
		ManualBackupWorkflowUnretriableErrorTotal,
		RestoreTerminalFailuresTotal,
	)
}

const (
	ManualBackupWorkflowUnretriableErrorType_StatusFailed = "status_failed"
)

var (
	// monitoring backup setting initialization
	CreateBackupSettingActionFailuresTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Name: "create_backup_setting_action_failures_total",
			Help: "Total number of failed create backup setting actions",
		},
		[]string{"cluster_id"},
	)

	// monitoring backup setting deletion
	DeleteBackupSettingActionFailuresTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Name: "delete_backup_setting_action_failures_total",
			Help: "Total number of failed delete backup setting actions",
		},
		[]string{"cluster_id"},
	)

	RestoreTerminalFailuresTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Name: "restore_terminal_failures_total",
			Help: "Terminal restore failures by source and stable failure code",
		},
		[]string{"cluster_id", "restore_mode", "action", "failure_source", "failure_code"},
	)

	// monitoring manual backup workflow
	ManualBackupWorkflowUnretriableErrorTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Name: "manual_backup_workflow_unretriable_error_total",
			Help: "Unretriable error of manual backup workflow",
		},
		[]string{"cluster_id", "backup_id", "action", "error_type"},
	)
)

func RecordRestoreTerminalFailure(clusterID, restoreMode, action, source, code string) {
	RestoreTerminalFailuresTotal.WithLabelValues(clusterID, restoreMode, action, source, code).Inc()
}
