<?php
// premium/class-backup-codes.php

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

/**
 * Genera 10 códigos de respaldo únicos y los guarda en la base de datos del usuario.
 */
function wp2fa_generate_backup_codes($user_id) {
    $codes = [];
    for ($i = 0; $i < 10; $i++) {
        $codes[] = wp_generate_password(8, false, false);
    }

    update_user_meta($user_id, 'wp2fa_backup_codes', $codes);
    return $codes;
}

/**
 * Obtiene los códigos de respaldo del usuario actual.
 */
function wp2fa_get_backup_codes($user_id) {
    return get_user_meta($user_id, 'wp2fa_backup_codes', true) ?: [];
}

/**
 * Verifica si un código ingresado es uno de los códigos de respaldo válidos.
 */
function wp2fa_validate_backup_code($user, $code_input) {
    $codes = wp2fa_get_backup_codes($user->ID);

    if (in_array($code_input, $codes)) {
        // Eliminar el código usado
        $codes = array_diff($codes, [$code_input]);
        update_user_meta($user->ID, 'wp2fa_backup_codes', $codes);
        return $user;
    }

    return new WP_Error('2fa_invalid', __('Código de respaldo inválido.', 'wp-2fa-authenticator'));
}

/**
 * Agrega una sección a la página de configuración del usuario para ver o regenerar los códigos.
 */
function wp2fa_render_backup_codes_section() {
    $user_id = get_current_user_id();
    $codes = wp2fa_get_backup_codes($user_id);

    if (isset($_POST['regenerate_backup_codes'])) {
        $codes = wp2fa_generate_backup_codes($user_id);
        echo '<div class="notice notice-success"><p>Nuevos códigos de respaldo generados.</p></div>';
    }

    echo '<h2>Códigos de Respaldo</h2>';
    echo '<p>Usa estos códigos si pierdes acceso a tu autenticación primaria. Cada código solo puede usarse una vez.</p>';

    if (!empty($codes)) {
        echo '<ul style="font-family:monospace;">';
        foreach ($codes as $code) {
            echo '<li>' . esc_html($code) . '</li>';
        }
        echo '</ul>';
    } else {
        echo '<p><em>No tienes códigos de respaldo disponibles.</em></p>';
    }

    echo '<form method="post">
        <input type="submit" name="regenerate_backup_codes" value="Regenerar Códigos" class="button button-secondary">
    </form>';
}
