class RubyLLM::ErrorMiddleware

def parse_error(provider:, response:) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/AbcSize,Metrics/PerceivedComplexity

rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/AbcSize,Metrics/PerceivedComplexity
def parse_error(provider:, response:) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/AbcSize,Metrics/PerceivedComplexity
  message = provider&.parse_error(response)
  case response.status
  when 200..399
    message
  when 400
    raise BadRequestError.new(response, message || 'Invalid request - please check your input')
  when 401
    raise UnauthorizedError.new(response, message || 'Invalid API key - check your credentials')
  when 402
    raise PaymentRequiredError.new(response, message || 'Payment required - please top up your account')
  when 403
    raise ForbiddenError.new(response,
                             message || 'Forbidden - you do not have permission to access this resource')
  when 429
    raise RateLimitError.new(response, message || 'Rate limit exceeded - please wait a moment')
  when 500
    raise ServerError.new(response, message || 'API server error - please try again')
  when 502..503
    raise ServiceUnavailableError.new(response, message || 'API server unavailable - please try again later')
  when 529
    raise OverloadedError.new(response, message || 'Service overloaded - please try again later')
  else
    raise Error.new(response, message || 'An unknown error occurred')
  end
end