<?php
/**
 * WP Site Health functionality temporarily stored in this file until all of Jetpack is PHP 5.3+
 *
 * @package Jetpack.
 */

use Automattic\Jetpack\Sync\Modules;
/**
 * Test runner for Core's Site Health module.
 *
 * @since 7.3.0
 */
function jetpack_debugger_ajax_local_testing_suite() {
	check_ajax_referer( 'health-check-site-status' );
	if ( ! current_user_can( 'jetpack_manage_modules' ) ) {
		wp_send_json_error();
	}
	$tests = new Jetpack_Cxn_Tests();
	wp_send_json_success( $tests->output_results_for_core_async_site_health() );
}
/**
 * Adds the Jetpack Local Testing Suite to the Core Site Health system.
 *
 * @since 7.3.0
 *
 * @param array $core_tests Array of tests from Core's Site Health.
 *
 * @return array $core_tests Array of tests for Core's Site Health.
 */
function jetpack_debugger_site_status_tests( $core_tests ) {
	$cxn_tests = new Jetpack_Cxn_Tests();
	$tests     = $cxn_tests->list_tests( 'direct' );
	foreach ( $tests as $test ) {

		$core_tests['direct'][ $test['name'] ] = array(
			'label' => __( 'Jetpack: ', 'jetpack' ) . $test['name'],
			/**
			 * Callable for Core's Site Health system to execute.
			 *
			 * @param array $test A Jetpack Testing Suite test array.
			 * @param Jetpack_Cxn_Tests $cxn_tests An instance of the Jetpack Test Suite.
			 *
			 * @return array {
			 *      A results array to match the format expected by WordPress Core.
			 *
			 *      @type string $label Name for the test.
			 *      @type string $status 'critical', 'recommended', or 'good'.
			 *      @type array $badge Array for Site Health status. Keys label and color.
			 *      @type string $description Description of the test result.
			 *      @type string $action HTML to a link to resolve issue.
			 *      @type string $test Unique test identifier.
			 *  }
			 */
			'test'  => function() use ( $test, $cxn_tests ) {
				$results = $cxn_tests->run_test( $test['name'] );
				if ( is_wp_error( $results ) ) {
					return;
				}

				$label = $results['label'] ?
					$results['label'] :
					ucwords(
						str_replace(
							'_',
							' ',
							str_replace( 'test__', '', $test['name'] )
						)
					);
				if ( $results['long_description'] ) {
					$description = $results['long_description'];
				} elseif ( $results['short_description'] ) {
					$description = sprintf(
						'<p>%s</p>',
						$results['short_description']
					);
				} else {
					$description = sprintf(
						'<p>%s</p>',
						__( 'This test successfully passed!', 'jetpack' )
					);
				}

				$return = array(
					'label'       => $label,
					'status'      => 'good',
					'badge'       => array(
						'label' => __( 'Jetpack', 'jetpack' ),
						'color' => 'green',
					),
					'description' => $description,
					'actions'     => '',
					'test'        => 'jetpack_' . $test['name'],
				);

				if ( false === $results['pass'] ) {
					$return['status'] = $results['severity'];
					if ( ! empty( $results['action'] ) ) {
						$return['actions'] = sprintf(
							'<a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>',
							esc_url( $results['action'] ),
							$results['action_label'],
							/* translators: accessibility text */
							__( '(opens in a new tab)', 'jetpack' )
						);
					}
				}

				return $return;
			},
		);
	}
	$core_tests['async']['jetpack_test_suite'] = array(
		'label' => __( 'Jetpack Tests', 'jetpack' ),
		'test'  => 'jetpack_local_testing_suite',
	);

	return $core_tests;
}

/**
 * Loads site health scripts if we are on the site health page.
 *
 * @param string $hook The current admin page hook.
 */
function jetpack_debugger_enqueue_site_health_scripts( $hook ) {
	$full_sync_module = Modules::get_module( 'full-sync' );
	$progress_percent = $full_sync_module ? $full_sync_module->get_sync_progress_percentage() : false;

	$ajax_nonce = wp_create_nonce( 'jetpack-site-health' );

	if ( 'site-health.php' === $hook ) {
		$wp_scripts = wp_scripts();
		wp_enqueue_script( 'jquery-ui-progressbar' );
		wp_enqueue_script(
			'jetpack_debug_site_health_script',
			plugins_url( 'jetpack-debugger-site-health.js', __FILE__ ),
			array( 'jquery-ui-progressbar' ),
			JETPACK__VERSION,
			false
		);
		wp_enqueue_style(
			'jetpack_debug_site_health_styles',
			plugins_url( 'jetpack-debugger-site-health.css', __FILE__ ),
			false,
			JETPACK__VERSION,
			false
		);
		/* WordPress is not bundled with jquery UI styles - we need to grab them from the Google API. */
		wp_enqueue_style(
			'jetpack-jquery-ui-styles',
			'https://code.jquery.com/ui/' . $wp_scripts->registered['jquery-ui-core']->ver . '/themes/smoothness/jquery-ui.min.css',
			false,
			JETPACK__VERSION,
			false
		);
		wp_localize_script(
			'jetpack_debug_site_health_script',
			'jetpackSiteHealth',
			array(
				'ajaxUrl'             => admin_url( 'admin-ajax.php' ),
				'syncProgressHeading' => __( 'Jetpack is performing a sync of your site', 'jetpack' ),
				'progressPercent'     => $progress_percent,
				'fullSyncNonce'       => $ajax_nonce,
			)
		);
	}
}

/**
 * Responds to ajax calls from the site health page. Echos a full sync percantage to update progress bar.
 */
function jetpack_debugger_sync_progress_ajax() {
	$full_sync_module = Modules::get_module( 'full-sync' );
	$progress_percent = $full_sync_module ? $full_sync_module->get_sync_progress_percentage() : null;
	if ( ! $progress_percent ) {
		echo 'done';
		wp_die();
	}
	echo intval( $progress_percent );
	wp_die();
}

/**
 * Responds to ajax calls from the site health page. Triggers a Full Sync
 */
function jetpack_debugger_full_sync_start() {
	check_ajax_referer( 'jetpack-site-health', 'site-health-nonce' );
	$full_sync_module = Modules::get_module( 'full-sync' );
	$full_sync_module->start();
	echo 'requested';
	wp_die();
}
