<?php
/**
 * Eseguito da WordPress SOLO quando l'utente clicca "Elimina" sul plugin
 * dalla schermata Plugin (mai alla semplice disattivazione, e mai da un
 * aggiornamento/reinstallazione sopra una versione già presente).
 *
 * Per impostazione predefinita i dati 2FA vengono conservati. L'utente
 * può scegliere di cancellare tutto definitivamente dalla sezione
 * "Disinstallazione" del pannello SPIDY 2FA LOGIN, prima di disinstallare.
 *
 * @package SPIDy_WP
 */

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

$spidy_wp_delete_data = get_option( 'spidy_wp_delete_data_on_uninstall', '0' );

if ( '1' === $spidy_wp_delete_data ) {
	global $wpdb;

	// L'utente ha scelto esplicitamente di cancellare tutto. La query
	// prende chiunque abbia almeno uno dei meta del plugin.
	$spidy_wp_users = get_users(
		array(
			'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- necessario per individuare tutti gli utenti con dati del plugin da ripulire, eseguito solo alla disinstallazione esplicita, mai su una richiesta utente normale.
				'relation' => 'OR',
				array(
					'key'     => '_spidy_wp_enabled',
					'compare' => 'EXISTS',
				),
				array(
					'key'     => '_spidy_wp_phone',
					'compare' => 'EXISTS',
				),
				array(
					'key'     => '_spidy_wp_webauthn_credentials',
					'compare' => 'EXISTS',
				),
			),
			'fields'     => 'ID',
		)
	);

	foreach ( $spidy_wp_users as $spidy_wp_user_id ) {
		delete_user_meta( $spidy_wp_user_id, '_spidy_wp_enabled' );
		delete_user_meta( $spidy_wp_user_id, '_spidy_wp_phone' );
		delete_user_meta( $spidy_wp_user_id, '_spidy_wp_method' );
		delete_user_meta( $spidy_wp_user_id, '_spidy_wp_webauthn_credentials' );
	}

	// Rimuove eventuali OTP/token/challenge temporanei ancora presenti
	// (storage diretto usato al posto dei transient nativi — vedi
	// class-spidy-wp-login.php — copre login pendenti, codici OTP,
	// contatore tentativi e challenge WebAuthn di registrazione/verifica).
	// Le chiavi sono un hash MD5, quindi il pattern cerca solo il
	// prefisso comune, non la chiave logica originale.
	// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
	$wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_spidy\_wp\_kv\_%'" );

	// Impostazioni provider SMS (Twilio / Clickatell).
	delete_option( 'spidy_wp_sms_provider' );
	delete_option( 'spidy_wp_sms_twilio_sid' );
	delete_option( 'spidy_wp_sms_twilio_token' );
	delete_option( 'spidy_wp_sms_twilio_from' );
	delete_option( 'spidy_wp_sms_clickatell_apikey' );
	delete_option( 'spidy_wp_sms_last_errors' );

	// Avviso HTTPS pendente (Requirements) e la preferenza stessa.
	delete_option( 'spidy_wp_https_warning_pending' );
	delete_option( 'spidy_wp_delete_data_on_uninstall' );
}

// Se $spidy_wp_delete_data non è '1' (impostazione predefinita), non
// viene cancellato nulla: i meta utente restano nel database.
