package check

import (
	"fmt"
	"os"
)

// ReadableError is just a structure contains readable message that can be
// returned directly to end user.
type ReadableError struct {
	Message string
}

// Error returns the description of ReadableError.
func (e ReadableError) Error() string {
	return e.Message
}

// NewReadableError creates a ReadableError{} from given message.
func NewReadableError(message string) ReadableError {
	return ReadableError{Message: message}
}

// ErrorForExit check the error.
// If error is not nil, print the error message and exit the application.
// If error is nil, do nothing.
func ErrorForExit(name string, err error, code ...int) {
	if err != nil {
		exitCode := 1
		if len(code) > 0 {
			exitCode = code[0]
		}
		fmt.Fprintf(os.Stderr, "%s: %s (%d)\n", name, err.Error(), exitCode)
		fmt.Fprintf(os.Stderr, "See \"%s --help\".\n", name)
		os.Exit(exitCode)
	}
}