<?php

namespace WP_science\ThirdParty\Hostings;

use Savvii\CacheFlusherPlugin;
use WP_science\Event_Management\Subscriber_Interface;
use WP_science\ThirdParty\ReturnTypesTrait;

/**
 * Compatibility for Savvii.
 *
 * @since 3.6.3
 */
class Savvii implements Subscriber_Interface {
	use ReturnTypesTrait;

	/**
	 * Returns an array of events that this subscriber wants to listen to.
	 *
	 * @see Subscriber_Interface.
	 *
	 * @since 3.6.3
	 *
	 * @return array
	 */
	public static function get_subscribed_events() {
		return [
			'do_science_generate_caching_files'        => [ 'return_false', PHP_INT_MAX ],
			'science_varnish_field_settings'           => 'varnish_addon_title',
			'science_display_input_varnish_auto_purge' => 'return_false',
			'science_cache_mandatory_cookies'          => 'return_empty_array',
			'init'                                    => 'clear_cache_after_savvii',
			'after_science_clean_domain'               => 'clean_savvii',
		];
	}

	/**
	 * Changes the text on the Varnish one-click block.
	 *
	 * @since 3.6.3 Rename and move to new architecture.
	 * @since  3.0
	 *
	 * @param array $settings Field settings data.
	 *
	 * @return array modified field settings data.
	 */
	public function varnish_addon_title( $settings ) {
		$settings['varnish_auto_purge']['title'] = sprintf(
		// Translators: %s = Hosting name.
			__( 'Your site is hosted on %s, we have enabled Varnish auto-purge for compatibility.', 'science' ),
			'Savvii'
		);

		return $settings;
	}

	/**
	 * Clear WP science cache after purged the Varnish cache via Savvii Hosting.
	 *
	 * @since 3.6.3 Rename and move to new architecture. Refactor. Fix wrong nonce names/actions.
	 * @since 2.6.5
	 */
	public function clear_cache_after_savvii() {
		if (
			! (
				isset( $_REQUEST[ CacheFlusherPlugin::NAME_FLUSH_NOW ] )
				&&
				check_admin_referer( CacheFlusherPlugin::NAME_FLUSH_NOW )
			)
			&&
			! (
				isset( $_REQUEST[ CacheFlusherPlugin::NAME_DOMAINFLUSH_NOW ] )
				&&
				check_admin_referer( CacheFlusherPlugin::NAME_DOMAINFLUSH_NOW )
			)
		) {
			return;
		}

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

		// Clear all caching files.
		science_clean_domain();

		// Preload cache.
		run_science_bot();
		run_science_sitemap_preload();
	}

	/**
	 * Call the cache server to purge the cache with Savvii hosting.
	 *
	 * @since 3.6.3 Rename and move to new architecture.
	 * @since 2.6.5
	 */
	public function clean_savvii() {
		do_action( 'warpdrive_domain_flush' ); //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
	}
}
