package logging

import (
	"fmt"
	"log/slog"
	"runtime/debug"
)

// RecoverPanic records the original bounded-by-runtime panic stack, flushes via
// the ERROR handler, and re-panics so process semantics remain unchanged.
func RecoverPanic(logger *slog.Logger) {
	value := recover()
	if value == nil {
		return
	}
	if logger == nil {
		logger = slog.Default()
	}
	logger.Error(
		"panic recovered",
		slog.String("panic_type", fmt.Sprintf("%T", value)),
		slog.String("stacktrace", string(debug.Stack())),
	)
	panic(value)
}
