# frozen_string_literal: true

module MobileDetection
  def self.mobile_device?(user_agent)
    user_agent =~ /Mobile/ && !(user_agent =~ /iPad/)
  end

  # we need this as a reusable chunk that is called from the cache
  def self.resolve_mobile_view!(user_agent, params, session)
    return false unless SiteSetting.enable_mobile_theme

    session[:mobile_view] = params[:mobile_view] if params && params.has_key?(:mobile_view)
    session[:mobile_view] = nil if params && params.has_key?(:mobile_view) &&
      params[:mobile_view] == "auto"

    if session && session[:mobile_view]
      session[:mobile_view] == "1"
    else
      mobile_device?(user_agent)
    end
  end

  def self.ios_device?(user_agent)
    user_agent =~ /iPad|iPhone|iPod/
  end

  MODERN_MOBILE_REGEX =
    %r{
    \(.*iPhone\ OS\ 1[5-9].*\)|
    \(.*iPad.*OS\ 1[5-9].*\)|
    Chrome\/8[89]|
    Chrome\/9[0-9]|
    Chrome\/1[0-9][0-9]|
    Firefox\/8[5-9]|
    Firefox\/9[0-9]|
    Firefox\/1[0-9][0-9]
  }x

  USER_AGENT_MAX_LENGTH = 400

  def self.modern_mobile_device?(user_agent)
    user_agent[0...USER_AGENT_MAX_LENGTH].match?(MODERN_MOBILE_REGEX)
  end
end