<?php
/**
 * Verifica dei requisiti minimi per WebAuthn (HTTPS obbligatorio).
 *
 * @package SPIDy_WP
 */

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

class SPIDy_WP_Requirements {

	/**
	 * Eseguito da register_activation_hook. A differenza della versione
	 * originaria (dedicata SOLO al biometrico), questo plugin funziona
	 * regolarmente anche in HTTP con i metodi Email e SMS: l'attivazione
	 * quindi non viene mai bloccata. Manca solo l'HTTPS? Si avvisa che il
	 * solo Biometrico non sarà disponibile, nient'altro.
	 */
	public static function check_on_activation() {
		if ( ! self::is_site_secure() ) {
			add_option( 'spidy_wp_https_warning_pending', '1' );
		}
	}

	/**
	 * Eseguito ad ogni admin_init: avviso non bloccante se manca HTTPS.
	 * Email e SMS restano pienamente funzionanti; solo il Biometrico ne
	 * risente (verificato altrove prima di offrirlo).
	 */
	public static function check_on_admin_init() {
		if ( self::is_site_secure() ) {
			delete_option( 'spidy_wp_https_warning_pending' );
			return;
		}

		add_action(
			'admin_notices',
			function () {
				if ( ! current_user_can( 'manage_options' ) ) {
					return;
				}
				echo '<div class="notice notice-warning"><p><strong>SPIDY 2FA LOGIN:</strong> ';
				echo esc_html__( 'il sito non risulta servito in HTTPS: il metodo di accesso Biometrico non è disponibile finché non viene installato un certificato SSL valido. I metodi Email e SMS continuano a funzionare normalmente.', 'spidy-2fa-login' );
				echo '</p></div>';
			}
		);
	}

	/**
	 * Determina se il sito gira su HTTPS.
	 * localhost/127.0.0.1 sono ammessi come "secure context" per lo
	 * sviluppo locale, coerentemente con le specifiche WebAuthn.
	 */
	public static function is_site_secure(): bool {
		if ( is_ssl() ) {
			return true;
		}

		$host = wp_parse_url( home_url(), PHP_URL_HOST );

		return in_array( $host, array( 'localhost', '127.0.0.1', '::1' ), true );
	}
}
