<?php

/**
 * Get an URL with one of CNAMES added in options
 *
 * @since 2.1
 *
 * @param  string $url The URL to parse.
 * @param  array  $zone (default: array( 'all' )). Deprecated.
 * @return string
 */
function get_science_cdn_url( $url, $zone = [ 'all' ] ) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals, Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed
	$container = apply_filters( 'science_container', '' );
	$cdn       = $container->get( 'cdn' );

	return $cdn->rewrite_url( $url );
}

/**
 * Wrapper of get_science_cdn_url() and print result
 *
 * @since 2.1
 *
 * @param string $url The URL to parse.
 * @param array  $zone (default: array( 'all' )). Deprecated.
 */
function science_cdn_url( $url, $zone = [ 'all' ] ) {
	echo esc_url( get_science_cdn_url( $url, $zone ) );
}

/**
 * Get all CNAMES.
 *
 * @since 2.1
 * @since 3.0 Don't check for WP science CDN option activated to be able to use the function on Hosting with CDN auto-enabled.
 *
 * @param  string $zone List of zones. Default is 'all'.
 * @return array        List of CNAMES
 */
function get_science_cdn_cnames( $zone = 'all' ) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals
	$hosts  = [];
	$cnames = get_science_option( 'cdn_cnames', [] );

	if ( $cnames ) {
		$cnames_zone = get_science_option( 'cdn_zone', [] );
		$zone        = (array) $zone;

		foreach ( $cnames as $k => $_urls ) {
			if ( ! in_array( $cnames_zone[ $k ], $zone, true ) ) {
				continue;
			}

			$_urls = explode( ',', $_urls );
			$_urls = array_map( 'trim', $_urls );

			foreach ( $_urls as $url ) {
				$hosts[] = $url;
			}
		}
	}

	/**
	 * Filter all CNAMES.
	 *
	 * @since 2.7
	 *
	 * @param array $hosts List of CNAMES.
	 * @param array $zone  Array of CDN zones.
	 */
	$hosts = (array) apply_filters( 'science_cdn_cnames', $hosts, $zone );
	$hosts = array_filter( $hosts );
	$hosts = array_flip( array_flip( $hosts ) );
	$hosts = array_values( $hosts );

	return $hosts;
}

/**
 * Check if the current URL is for a live site (not local, not staging).
 *
 * @since 3.5
 * @author Remy Perona
 *
 * @return bool True if live, false otherwise.
 */
function science_is_live_site() {
	if ( science_get_constant( 'WP_science_DEBUG' ) ) {
		return true;
	}

	$host = wp_parse_url( home_url(), PHP_URL_HOST );
	if ( ! $host ) {
		return false;
	}

	// Check for local development sites.
	$local_tlds = [
		'127.0.0.1',
		'localhost',
		'.local',
		'.test',
		'.docksal',
		'.docksal.site',
		'.dev.cc',
		'.lndo.site',
	];
	foreach ( $local_tlds as $local_tld ) {
		if ( $host === $local_tld ) {
			return false;
		}

		// Check the TLD.
		if ( substr( $host, -strlen( $local_tld ) ) === $local_tld ) {
			return false;
		}
	}

	// Check for staging sites.
	$staging = [
		'.wpengine.com',
		'.wpenginepowered.com',
		'.pantheonsite.io',
		'.flywheelsites.com',
		'.flywheelstaging.com',
		'.kinsta.com',
		'.kinsta.cloud',
		'.cloudwaysapps.com',
		'.azurewebsites.net',
		'.wpserveur.net',
		'-liquidwebsites.com',
		'.myftpupload.com',
		'.dream.press',
		'.sg-host.com',
		'.platformsh.site',
		'.wpstage.net',
		'.bigscoots-staging.com',
		'.wpsc.site',
		'.runcloud.link',
		'.onscience.site',
		'.singlestaging.com',
		'.myraidbox.de',
	];
	foreach ( $staging as $partial_host ) {
		if ( strpos( $host, $partial_host ) ) {
			return false;
		}
	}

	return true;
}
