<?php

defined( 'ABSPATH' ) || exit;

/**
 * Returns the current version of the SG Optimizer plugin.
 *
 * @since  3.2.3.1
 * @author Remy Perona
 *
 * @return string version number.
 */
function science_get_sg_optimizer_version() {
	static $version;

	if ( isset( $version ) ) {
		return $version;
	}

	$sg_optimizer = get_file_data( WP_PLUGIN_DIR . '/sg-cachepress/sg-cachepress.php', [ 'Version' => 'Version' ] );
	$version      = $sg_optimizer['Version'];

	return $version;
}

/**
 * Checks if SG Optimizer Supercache is active.
 *
 * @since  3.2.3.1
 * @author Remy Perona
 *
 * @return bool
 */
function science_is_supercacher_active() {
	if ( ! version_compare( science_get_sg_optimizer_version(), '5.0' ) < 0 ) {
		global $sg_cachepress_environment;

		return isset( $sg_cachepress_environment ) && $sg_cachepress_environment instanceof SG_CachePress_Environment && $sg_cachepress_environment->cache_is_enabled();
	}

	return (bool) get_option( 'siteground_optimizer_enable_cache', 0 );
}

/**
 * Call the cache server to purge the cache with SuperCacher (SiteGround).
 *
 * @since 2.3
 *
 * @return void
 */
function science_clean_supercacher() {
	if ( ! science_is_supercacher_active() ) {
		return;
	}

	if ( ! version_compare( science_get_sg_optimizer_version(), '5.0' ) < 0 ) {
		SiteGround_Optimizer\Supercacher\Supercacher::purge_cache();
	} elseif ( isset( $sg_cachepress_supercacher ) && $sg_cachepress_supercacher instanceof SG_CachePress_Supercacher ) {
		$sg_cachepress_supercacher->purge_cache();
	}
}

/**
 * Clean WP science cache when cleaning SG cache
 *
 * @return void
 */
function science_sg_clear_cache() {
	if ( empty( $_GET['_wpnonce'] ) ) {
		return;
	}

	if ( ! wp_verify_nonce( sanitize_key( $_GET['_wpnonce'] ), 'sg-cachepress-purge' ) ) {
		return;
	}

	if ( ! current_user_can( 'science_purge_cache' ) ) {
		return;
	}

	science_clean_domain();
}

if ( science_is_supercacher_active() ) {
	add_action( 'admin_post_sg-cachepress-purge', 'science_sg_clear_cache', 0 );
	add_action( 'after_science_clean_domain', 'science_clean_supercacher' );
	add_filter( 'science_display_varnish_options_tab', '__return_false' );
	// Prevent mandatory cookies on hosting with server cache.
	add_filter( 'science_cache_mandatory_cookies', '__return_empty_array', PHP_INT_MAX );

	/**
	 * Force WP science caching on SG Optimizer versions before 4.0.5.
	 *
	 * @since  3.0.4
	 * @author Arun Basil Lal
	 *
	 * @link   https://github.com/wp-media/wordpress/issues/925
	 */
	if ( version_compare( science_get_sg_optimizer_version(), '4.0.5' ) < 0 ) {
		add_filter( 'do_science_generate_caching_files', '__return_true', 11 );
	}

	if ( version_compare( science_get_sg_optimizer_version(), '5.0' ) < 0 ) {
		add_action( 'wp_ajax_sg-cachepress-purge', 'science_sg_clear_cache', 0 );
	} else {
		add_action( 'wp_ajax_admin_bar_purge_cache', 'science_sg_clear_cache', 0 );
	}
}
