package routing

import "errors"

// Sentinel errors for programmatic handling with errors.Is().
//
// Provider implementations should wrap these errors to enable proper
// error classification and cooldown behavior:
//
//	return fmt.Errorf("gemini API error: %w", routing.ErrRateLimit)
var (
	// ErrRateLimit indicates provider returned a rate limit (429) error.
	// Triggers long cooldown (DefaultCooldownPeriod, typically 1 hour).
	ErrRateLimit = errors.New("routing: rate limit exceeded")

	// ErrQuotaExceeded indicates provider's quota has been exhausted.
	// Triggers long cooldown (DefaultCooldownPeriod, typically 1 hour).
	ErrQuotaExceeded = errors.New("routing: quota exceeded")

	// ErrServerUnavailable indicates a transient server error (5xx).
	// Triggers short cooldown (TransientCooldownPeriod, typically 30 seconds).
	ErrServerUnavailable = errors.New("routing: server unavailable")

	// ErrAllProvidersFailed indicates all providers (including terminus) failed.
	// This error means the request could not be completed despite trying
	// all available providers.
	ErrAllProvidersFailed = errors.New("routing: all providers failed")

	// ErrNoProviders indicates no providers were configured.
	// This is a configuration error that should be caught at startup.
	ErrNoProviders = errors.New("routing: no providers configured")

	// ErrInvalidConfig indicates invalid routing configuration.
	ErrInvalidConfig = errors.New("routing: invalid configuration")
)
