package errors

// ErrorCode defines a string type for error codes
type ErrorCode string

const (
	// Standard HTTP-like Errors
	ErrBadRequest          ErrorCode = "BAD_REQUEST"
	ErrUnauthorized        ErrorCode = "UNAUTHORIZED"
	ErrForbidden           ErrorCode = "FORBIDDEN"
	ErrNotFound            ErrorCode = "NOT_FOUND"
	ErrMethodNotAllowed    ErrorCode = "METHOD_NOT_ALLOWED"
	ErrConflict            ErrorCode = "CONFLICT"
	ErrInternalServerError ErrorCode = "INTERNAL_SERVER_ERROR"
	ErrServiceUnavailable  ErrorCode = "SERVICE_UNAVAILABLE"

	// Domain Specific Errors
	ErrValidation         ErrorCode = "VALIDATION_ERROR"
	ErrPermissionDenied   ErrorCode = "PERMISSION_DENIED"
	ErrInvalidCredentials ErrorCode = "INVALID_CREDENTIALS"
	ErrTokenExpired       ErrorCode = "TOKEN_EXPIRED"
	ErrTokenInvalid       ErrorCode = "TOKEN_INVALID"
	ErrQuotaExceeded      ErrorCode = "QUOTA_EXCEEDED"
	ErrRateLimitExceeded  ErrorCode = "RATE_LIMIT_EXCEEDED"

	// Data Errors
	ErrRecordNotFound  ErrorCode = "RECORD_NOT_FOUND"
	ErrDuplicateRecord ErrorCode = "DUPLICATE_RECORD"
	ErrInvalidQuery    ErrorCode = "INVALID_QUERY"
	ErrFieldReadOnly   ErrorCode = "FIELD_READ_ONLY"
)

// AllErrorCodes returns a list of all defined error codes (for use in codegen/validation)
var AllErrorCodes = []ErrorCode{
	ErrBadRequest,
	ErrUnauthorized,
	ErrForbidden,
	ErrNotFound,
	ErrMethodNotAllowed,
	ErrConflict,
	ErrInternalServerError,
	ErrServiceUnavailable,
	ErrValidation,
	ErrPermissionDenied,
	ErrInvalidCredentials,
	ErrTokenExpired,
	ErrTokenInvalid,
	ErrQuotaExceeded,
	ErrRateLimitExceeded,
	ErrRecordNotFound,
	ErrDuplicateRecord,
	ErrInvalidQuery,
	ErrFieldReadOnly,
}
