<?php
/**
 * Archivo de verificación de caché de WP Rocket para CompiBot.
 *
 * Este archivo contiene la clase `CompibotWPCheckCache`, que verifica si WP Rocket está instalado
 * y muestra una advertencia en el administrador de WordPress si es necesario.
 *
 * @package Compibot
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Clase `CompibotWPCheckCache`
 *
 * Clase encargada de verificar si WP Rocket está instalado y activo, y de mostrar advertencias en el administrador.
 */
class CompibotWPCheckCache {


	const NOTICE_CLOSED_OPTION = 'compibot_wp_rocket_notice_closed';

	/**
	 * Método para comprobar si WP Rocket se encuentra instalado en el sistema
	 *
	 * @see https://developer.wordpress.org/reference/functions/is_plugin_active/
	 */
	public static function is_wp_rocket_active() {
		// Verificamos si WP Rocket se encuentra activo en el sistema.
		if ( is_plugin_active( 'wp-rocket/wp-rocket.php' ) ) {
			// Registrar un mensaje de advertencia de manera transitoria para mostrarlo en el admin.
			set_transient( 'compibot_wp_rocket_warning', true, 60 ); // Guardamos el mensaje por 60 segundos.
		}
	}


	/**
	 * Método para mostrar un mensaje de advertencia en el admin si WP Rocket se encuentra activo
	 */
	public static function show_wp_rocket_warning() {

		// Verifica si el aviso está registrado.
		if ( get_transient( 'compibot_wp_rocket_warning' ) && ! get_option( self::NOTICE_CLOSED_OPTION ) ) {
			echo '<div class="notice notice-warning is-dismissible compibot-wp-rocket-notice">
                    <p><strong>CompiBot:</strong> Se ha detectado que el plugin <strong>WP Rocket</strong> está instalado. Para asegurarte de que <strong>Compibot</strong> funcione correctamente, por favor desactiva WP Rocket o configura sus ajustes para evitar conflictos.</p>
                  </div>';

			// Elimina el transitorio para que el aviso no se repita.
		}
	}

	/**
	 * Método para comprobar si WP Rocket se encuentra activo y registra el aviso si es necesario
	 */
	public static function check_and_warn() {
		if ( self::is_wp_rocket_active() ) {
			set_transient( 'compibot_wp_rocket_warning', true, 60 ); // Guardamos el mensaje por 60 segundos.
		}
	}

	/**
	 * Método para cerrar el aviso de advertencia de WP Rocket y marcarlo como cerrado
	 */
	public static function dismiss_wp_rocket_notice() {
		if ( current_user_can( 'manage_options' ) ) {
			update_option( self::NOTICE_CLOSED_OPTION, true );
			delete_transient( 'compibot_wp_rocket_warning' );
		}
		wp_die();
	}
}
