// Package domain contains pure domain models with no external dependencies.
// These types represent the core business concepts of the service.
package domain

import "errors"

// Domain errors - these are business-level errors that should be translated
// to appropriate HTTP status codes by the handler layer.
var (
	// ErrNotFound indicates a requested resource does not exist.
	ErrNotFound = errors.New("not found")

	// ErrExampleNotFound indicates the requested example does not exist.
	ErrExampleNotFound = errors.New("example not found")

	// ErrDuplicateExample indicates an example with the same name already exists.
	ErrDuplicateExample = errors.New("example with this name already exists")

	// ErrInvalidExampleName indicates the example name is invalid.
	ErrInvalidExampleName = errors.New("invalid example name")

	// Auth errors
	ErrUserNotFound         = errors.New("user not found")
	ErrDuplicateEmail       = errors.New("email already registered")
	ErrInvalidCredentials   = errors.New("invalid email or password")
	ErrSessionNotFound      = errors.New("session not found")
	ErrSessionRevoked       = errors.New("session has been revoked")
	ErrInvalidAuthCode      = errors.New("invalid or expired code")
	ErrExpiredAuthCode      = errors.New("code has expired")
	ErrWeakPassword         = errors.New("password does not meet requirements")
	ErrUserSuspended        = errors.New("account is suspended")
	ErrRegistrationDisabled = errors.New("registration is disabled")
	ErrNameTooLong          = errors.New("name exceeds maximum length")
	ErrEmailTooLong         = errors.New("email exceeds maximum length")
	ErrInvalidAvatarURL     = errors.New("avatar URL must use http or https")

	// Persona errors
	ErrPersonaNotFound = errors.New("persona not found")
	ErrDuplicateHandle = errors.New("persona with this handle already exists")
)
