<?php
/**
 * Freemius helpers (serviceware model).
 *
 * La inicializacion del SDK (accesslens_fs()) vive en el main file accesslens.php.
 * IMPORTANTE: este plugin NO bloquea funciones localmente. Es un cliente plenamente
 * funcional de un servicio externo (el motor AccessLens). El nivel free/Pro lo aplica
 * el motor (serviceware, Guideline 6): el plugin solo le pasa la licencia y el motor
 * decide que devuelve. Por eso aqui NO hay un accesslens_is_pro() que gatee codigo.
 *
 * @package AccessLens
 */

declare(strict_types=1);

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Devuelve la clave de licencia de Freemius del sitio (si esta suscrito al servicio Pro),
 * para enviarla al motor. Cadena vacia si no hay suscripcion activa.
 *
 * @return string Clave de licencia o ''.
 */
function accesslens_license_key(): string {
	if ( ! function_exists( 'accesslens_fs' ) ) {
		return '';
	}

	// Permite forzar una licencia en entornos de prueba (ver tests/mu-pro.php).
	$forced = apply_filters( 'accesslens_license_key', '' );
	if ( is_string( $forced ) && '' !== $forced ) {
		return $forced;
	}

	if ( accesslens_fs()->is_paying() ) {
		$license = accesslens_fs()->_get_license();
		if ( $license && ! empty( $license->secret_key ) ) {
			return (string) $license->secret_key;
		}
	}

	return '';
}

/**
 * Limpieza en desinstalacion. Registrada en el hook after_uninstall de Freemius
 * (Freemius no permite uninstall.php en los deployments; el SDK invoca este hook
 * cuando WordPress desinstala el plugin).
 *
 * Multisite-aware: en una red, itera cada sitio con switch_to_blog() para limpiar
 * sus options/transients propios (cada blog tiene su propia tabla wp_X_options).
 *
 * @return void
 */
function accesslens_uninstall_cleanup(): void {
	if ( is_multisite() ) {
		$site_ids = get_sites( array( 'fields' => 'ids' ) );
		foreach ( $site_ids as $site_id ) {
			switch_to_blog( (int) $site_id );
			accesslens_uninstall_cleanup_single_site();
			restore_current_blog();
		}
		return;
	}

	accesslens_uninstall_cleanup_single_site();
}

/**
 * Limpieza de options/transients de AccessLens para el sitio (blog) actual.
 *
 * @return void
 */
function accesslens_uninstall_cleanup_single_site(): void {
	// Limpieza de instalaciones anteriores a 0.2.0: el ajuste ya no existe
	// (la URL del motor es la constante ACCESSLENS_ENGINE_URL).
	delete_option( 'accesslens_engine_url' );

	// Options introducidas en el Tier 1 (ultimo scan, onboarding, contador de
	// resenas). Todas se guardaron con autoload 'no' via AccessLens_Options.
	delete_option( 'accesslens_last_scan' );
	delete_option( 'accesslens_onboarding_dismissed' );
	delete_option( 'accesslens_scan_count' );
	delete_option( 'accesslens_installed_at' );
	delete_option( 'accesslens_review_dismissed' );

	// Historico de scans (Feature: Progress over time), introducido en 0.2.0.
	delete_option( 'accesslens_scan_history' );

	$user_ids = get_users(
		array(
			'fields' => 'ID',
			'number' => -1,
		)
	);

	foreach ( $user_ids as $user_id ) {
		delete_transient( 'accesslens_job_' . absint( $user_id ) );
	}

	// Transientes huerfanos de usuarios ya borrados.
	global $wpdb;
	// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
	$wpdb->query(
		"DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_accesslens_job_%' OR option_name LIKE '_transient_timeout_accesslens_job_%'"
	);
}
