package xerr

import (
	"fmt"
	"strings"
)

type wrappedError struct {
	base error
	msg  string
}

func (e wrappedError) Error() string {
	msg := strings.TrimSpace(e.msg)
	if e.base == nil {
		return msg
	}
	if msg == "" {
		return e.base.Error()
	}
	return e.base.Error() + ": " + msg
}

func (e wrappedError) Unwrap() error {
	return e.base
}

func Wrap(base error, msg string) error {
	return wrappedError{
		base: base,
		msg:  strings.TrimSpace(msg),
	}
}

func Wrapf(base error, format string, args ...any) error {
	return Wrap(base, fmt.Sprintf(format, args...))
}
