package authority

import (
	"net/http"
)

type context map[string]interface{}

// Error implements the api.Error interface and adds context to error messages.
type apiError struct {
	err     error
	code    int
	context context
}

// Cause implements the errors.Causer interface and returns the original error.
func (e *apiError) Cause() error {
	return e.err
}

// Error returns an error message with additional context.
func (e *apiError) Error() string {
	ret := e.err.Error()

	/*
		if len(e.context) > 0 {
			ret += "\n\nContext:"
			for k, v := range e.context {
				ret += fmt.Sprintf("\n    %s: %v", k, v)
			}
		}
	*/
	return ret
}

// StatusCode returns an http status code indicating the type and severity of
// the error.
func (e *apiError) StatusCode() int {
	if e.code == 0 {
		return http.StatusInternalServerError
	}
	return e.code
}