<?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase
/**
 * This file holds a function that needs to be loaded before WordPress itself
 * on WordPress.com.
 *
 * @package automattic/jetpack
 */

use Automattic\Jetpack\Device_Detection;

/**
 * Determine if the current User Agent matches the passed $kind
 *
 * @param string $kind Category of mobile device to check for.
 *                         Either: any, dumb, smart.
 * @param bool   $return_matched_agent Boolean indicating if the UA should be returned.
 *
 * @return bool|string Boolean indicating if current UA matches $kind. If
 *                              $return_matched_agent is true, returns the UA string
 */
function jetpack_is_mobile( $kind = 'any', $return_matched_agent = false ) {

	if ( function_exists( 'apply_filters' ) ) {
		/**
		 * Filter the value of jetpack_is_mobile before it is calculated.
		 *
		 * Passing a truthy value to the filter will short-circuit determining the
		 * mobile type, returning the passed value instead.
		 *
		 * @since  4.2.0
		 *
		 * @param bool|string $matches Boolean if current UA matches $kind or not. If
		 *                             $return_matched_agent is true, should return the UA string
		 * @param string      $kind Category of mobile device being checked
		 * @param bool        $return_matched_agent Boolean indicating if the UA should be returned
		 */
		$pre = apply_filters( 'pre_jetpack_is_mobile', null, $kind, $return_matched_agent );
		if ( $pre ) {
			return $pre;
		}
	}

	$return      = false;
	$device_info = Device_Detection::get_info();

	if ( 'any' === $kind ) {
		$return = $device_info['is_phone'];
	} elseif ( 'smart' === $kind ) {
		$return = $device_info['is_smartphone'];
	} elseif ( 'dumb' === $kind ) {
		$return = $device_info['is_phone'] && ! $device_info['is_smartphone'];
	}

	if ( $return_matched_agent && true === $return ) {
		$return = $device_info['is_phone_matched_ua'];
	}

	if ( function_exists( 'apply_filters' ) ) {
		/**
		 * Filter the value of jetpack_is_mobile
		 *
		 * @since  4.2.0
		 *
		 * @param bool|string $matches Boolean if current UA matches $kind or not. If
		 *                             $return_matched_agent is true, should return the UA string
		 * @param string      $kind Category of mobile device being checked
		 * @param bool        $return_matched_agent Boolean indicating if the UA should be returned
		 */
		$return = apply_filters( 'jetpack_is_mobile', $return, $kind, $return_matched_agent );
	}

	return $return;
}
