package cmd

import "fmt"

// SilentExitError signals that the command should exit with a specific code
// without printing an error message. This is used for scripting purposes
// where exit codes convey status (e.g., "no mail" = exit 1).
type SilentExitError struct {
	Code int
}

func (e *SilentExitError) Error() string {
	return fmt.Sprintf("exit %d", e.Code)
}

// NewSilentExit creates a SilentExitError with the given exit code.
func NewSilentExit(code int) *SilentExitError {
	return &SilentExitError{Code: code}
}

// IsSilentExit checks if an error is a SilentExitError and returns its code.
// Returns 0 and false if err is nil or not a SilentExitError.
func IsSilentExit(err error) (int, bool) {
	if err == nil {
		return 0, false
	}
	if se, ok := err.(*SilentExitError); ok {
		return se.Code, true
	}
	return 0, false
}
