<?php
/**
 * Plugin Name: eroQs 2FA Authenticator
 * Plugin URI:
 * Description: Plugin de autenticación 2FA para WordPress con generación local de QR y verificación en el mismo formulario de login.
 * Version: 1.0.0
 * Author: eroQs
 * Author URI: https://eroqs.com/
 * License: GPL2+
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: eroqs-2fa-authenticator
 * Domain Path: /languages
 */

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

// Insertar variable ajaxurl de forma segura
add_action('login_enqueue_scripts', function () {
    ?>
    <script type="text/javascript">
        var ajaxurl = "<?php echo esc_url(admin_url('admin-ajax.php')); ?>";
    </script>
    <?php
});

// Cargar dependencias
require_once __DIR__ . '/vendor/autoload.php';
require_once plugin_dir_path(__FILE__) . 'inc/license-manager.php';

// Validar licencia antes de definir funciones premium
if (!defined('WP2FA_PREMIUM')) {
    define('WP2FA_PREMIUM', WP2FA_License_Manager::is_license_valid());
}

require_once plugin_dir_path(__FILE__) . 'inc/class-totp.php';
require_once plugin_dir_path(__FILE__) . 'inc/class-email.php';
require_once plugin_dir_path(__FILE__) . 'inc/class-backup-codes.php';
require_once plugin_dir_path(__FILE__) . 'inc/settings-page.php';
require_once plugin_dir_path(__FILE__) . 'inc/class-login-handler.php';

use OTPHP\TOTP;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;

// Función para log de depuración
function wp_2fa_log_debug($message) {
    if (defined('WP_DEBUG') && WP_DEBUG === true) {
        error_log('[WP-2FA] ' . $message);
    }
}

// Agregar ítem al menú de administración
add_action('admin_menu', function () {
    add_menu_page('Autenticación 2FA', '2FA Settings', 'read', 'wp-2fa-settings', 'wp_2fa_settings_page', 'dashicons-shield', 25);
});

add_action('admin_init', 'wp2fa_fix_user_2fa_methods');

function wp2fa_fix_user_2fa_methods() {
    if (!current_user_can('manage_options')) return;

    $global_method = get_option('wp2fa_auth_method', 'totp');
    $is_premium = defined('WP2FA_PREMIUM') && WP2FA_PREMIUM === true && WP2FA_License_Manager::is_premium_active();

    $users = get_users();
    foreach ($users as $user) {
        $user_method = get_user_meta($user->ID, 'wp_2fa_method', true);

        // Si el método no está definido o es "both" sin licencia premium, lo corregimos
        if (empty($user_method) || (!$is_premium && $user_method === 'both') || !in_array($user_method, ['totp', 'email', 'both'])) {
            $corrected_method = ($is_premium) ? $global_method : 'totp';
            update_user_meta($user->ID, 'wp_2fa_method', $corrected_method);

            if (defined('WP_DEBUG') && WP_DEBUG) {
                error_log('[WP-2FA] Usuario ' . esc_html($user->user_login) . ' actualizado a método: ' . esc_html($corrected_method));
            }
        }
    }

    // Solo correr una vez
    remove_action('admin_init', 'wp2fa_fix_user_2fa_methods');
}

// AJAX para enviar el código por correo
add_action('wp_ajax_nopriv_wp2fa_send_email_code', 'wp2fa_send_email_code_ajax');

function wp2fa_send_email_code_ajax() {
    $username = isset($_POST['username']) ? sanitize_user($_POST['username']) : '';
    if (!$username) {
        wp_send_json_error(['message' => 'Nombre de usuario no válido']);
    }

    $user = get_user_by('login', $username);
    if (!$user || !is_email($user->user_email)) {
        wp_send_json_error(['message' => 'Usuario no válido']);
    }

    if (defined('WP2FA_PREMIUM') && WP2FA_PREMIUM === true && WP2FA_License_Manager::is_premium_active()) {
        WP2FA_Email_Auth::send_email_code($user->ID);
        wp_send_json_success(['message' => 'Código enviado']);
    }

    wp_send_json_error(['message' => 'No autorizado']);
}

// Iniciar lógica de login unificado
WP2FA_Login_Handler::init();
