package service

import (
	"errors"
	"fmt"
)

func RetriableErrorf(format string, a ...any) error {
	return &RetriableError{fmt.Errorf(format, a...)}
}

func RetriableErrorNew(err error) error {
	return &RetriableError{err}
}

func AsRetriableError(err error) (*RetriableError, bool) {
	rerr := &RetriableError{}
	is := errors.As(err, &rerr)
	return rerr, is
}

type RetriableError struct {
	Reason error
}

func (e *RetriableError) Error() string {
	return e.Reason.Error()
}

func MetricResultFromErr(err error) string {
	if _, is := AsRetriableError(err); is {
		return "retriable"
	}
	if err != nil {
		return "failed"
	}
	return "success"
}
