<?php
/**
 * Manejo del cron diario de Compibot.
 *
 * Este archivo programa un evento cron que se ejecuta diariamente para realizar escaneos
 * relacionados con los módulos del usuario en WordPress.
 *
 * @package Compibot
 */

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

/**
 * Programa el evento cron que se ejecuta diariamente a las 02:00 AM.
 *
 * @return void
 */
function compibot_register_daily_cron_event() {
	if ( ! wp_next_scheduled( 'compibot_daily_scan_cron' ) ) {
		$timestamp = strtotime( '02:00:00' ); // Programamos el cron para las 02:00 AM.
		wp_schedule_event( $timestamp, 'daily', 'compibot_daily_scan_cron' );
	}
}

add_action( 'wp', 'compibot_register_daily_cron_event' );

/**
 * Ejecuta la tarea cron diaria para escanear módulos de WordPress.
 *
 * Obtiene datos de la base de datos y, si el módulo "WordPress" está presente,
 * realiza un escaneo en base al tipo de análisis configurado.
 *
 * @return void
 */
function compibot_daily_scan_cron_function() {
	global $wpdb;
	$table_name = $wpdb->prefix . 'compibot';

	// Obtenemos el campo módulos de la base de datos.
	// $result = $wpdb->get_row("SELECT token, modulos, scan_type FROM $table_name WHERE id = 1");.
	$table_name = esc_sql( $table_name );

	// Cacheamos la consulta.
	$cache_key = 'plugin_modulos';
	$result    = wp_cache_get( $cache_key, 'plugin_group' );

	if ( false === $result ) {
        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
		$result = $wpdb->get_row(
			$wpdb->prepare(
				'SELECT token, modulos, scan_type FROM %s WHERE id = %d',
				$table_name,
				1
			)
		);

		wp_cache_set( $cache_key, $result, 'plugin_group', 60 ); // Cache por 1h.
	}

	// Comprobamos que "WordPress" se encuentra dentro de los modulos.
	$modulos = json_decode( $result->modulos, true );
	// Comprobamos si modulos tiene woocommerce.
	$modulo_wordpress = is_array( $modulos ) && in_array( 'WordPress', $modulos, true );

	if ( is_array( $modulos ) && in_array( 'WordPress', $modulos, true ) ) {
		// En este caso, como WordPress está presente en módulos, podemos realizar el escaneo.

		// Obtenemos el tipo de escaneo.
		$scan_type = $result->scan_type;
		$token     = $result->token;

		// Llamamos a la función que realiza el escaneo según el tipo.
		compibot_perform_scan_based_on_type( $scan_type, $token ); // Función de "compibot-page.php".
	}
}

add_action( 'compibot_daily_scan_cron', 'compibot_daily_scan_cron_function' );

/**
 * Elimina el evento cron cuando se desactiva el plugin.
 *
 * @return void
 */
function compibot_remove_daily_cron_event() {
	$timestamp = wp_next_scheduled( 'compibot_daily_scan_cron' );
	if ( $timestamp ) {
		wp_unschedule_event( $timestamp, 'compibot_daily_scan_cron' );
	}
}
register_deactivation_hook( __FILE__, 'compibot_remove_daily_cron_event' );
