<?php
// premium/class-email.php

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

// Genera y envía un código por correo electrónico
function wp2fa_generate_email_code($user_id) {
    $user = get_userdata($user_id);
    $user_email = $user->user_email;
    $code = wp_generate_password(6, false, false); // 6 dígitos alfanuméricos
    update_user_meta($user_id, 'wp2fa_email_code', $code);

    // Mostrar aviso en login luego de enviar
    set_transient('wp2fa_email_sent_' . $user_id, true, 5 * MINUTE_IN_SECONDS);

    $subject = 'Tu código de autenticación 2FA';
    $message = "Tu código de autenticación 2FA es: {$code}";
    wp_mail($user_email, $subject, $message);
}

// Valida el código enviado por correo
function wp2fa_validate_email_code($user, $code) {
    $stored_code = get_user_meta($user->ID, 'wp2fa_email_code', true);
    if (!$stored_code) {
        return new WP_Error('2fa_required', __('Se requiere autenticación por correo electrónico.', 'wp-2fa-authenticator'));
    }

    if ($code === $stored_code) {
        delete_user_meta($user->ID, 'wp2fa_email_code');
        return $user;
    }

    return new WP_Error('2fa_invalid', __('Código de autenticación por correo incorrecto.', 'wp-2fa-authenticator'));
}

// Muestra mensaje después de enviar el código
add_filter('login_message', function ($message) {
    $username = isset($_POST['log']) ? sanitize_user($_POST['log']) : '';
    $user = get_user_by('login', $username);

    if ($user && get_transient('wp2fa_email_sent_' . $user->ID)) {
        $message .= '<div class="message notice notice-info"><strong>Se ha enviado un código de autenticación a tu correo.</strong></div>';
        delete_transient('wp2fa_email_sent_' . $user->ID);
    }

    return $message;
});
