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

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

class WP2FA_Email_Auth {

    public static function init() {
        if (!defined('WP2FA_PREMIUM') || WP2FA_PREMIUM !== true) {
            return;
        }
    }

    public static function send_email_code($user_id) {
        $user = get_userdata($user_id);
        if (!$user || !is_email($user->user_email)) {
            return;
        }

        $code = wp_rand(100000, 999999); // Código numérico de 6 dígitos
        update_user_meta($user_id, 'wp_2fa_email_code', $code);
        set_transient('wp_2fa_email_sent_' . $user_id, true, 5 * MINUTE_IN_SECONDS);

        $subject = esc_html__('Tu código de autenticación en dos pasos', 'wp-2fa-authenticator');
        $message = sprintf(
            esc_html__("Hola %s,\n\nTu código de verificación es: %s\n\nEste código es válido por 5 minutos.", 'wp-2fa-authenticator'),
            $user->display_name,
            $code
        );
        $headers = ['Content-Type: text/plain; charset=UTF-8'];

        wp_mail($user->user_email, $subject, $message, $headers);
    }

    public static function validate_email_code($user) {
        $stored_code = get_user_meta($user->ID, 'wp_2fa_email_code', true);

        if (empty($stored_code)) {
            return $user;
        }

        if (!isset($_POST['2fa_email_code'])) {
            return new WP_Error('2fa_code_missing', esc_html__('Falta el código 2FA por correo.', 'wp-2fa-authenticator'));
        }

        $entered_code = sanitize_text_field($_POST['2fa_email_code']);

        if ($entered_code !== $stored_code) {
            return new WP_Error('invalid_2fa_email_code', esc_html__('Código 2FA por correo incorrecto o expirado.', 'wp-2fa-authenticator'));
        }

        delete_user_meta($user->ID, 'wp_2fa_email_code');
        delete_transient('wp_2fa_email_sent_' . $user->ID);

        return $user;
    }
}

WP2FA_Email_Auth::init();

// Bloque para envío por AJAX
add_action('wp_ajax_nopriv_send_2fa_email_code_ajax', function () {
    if (!isset($_POST['username'])) {
        wp_send_json_error(esc_html__('Falta el nombre de usuario.', 'wp-2fa-authenticator'));
    }

    $username = sanitize_user($_POST['username']);
    $user = get_user_by('login', $username);

    if (!$user && is_email($username)) {
        $user = get_user_by('email', $username);
    }

    if (!$user) {
        wp_send_json_error(esc_html__('Usuario no encontrado.', 'wp-2fa-authenticator'));
    }

    if (!defined('WP2FA_PREMIUM') || WP2FA_PREMIUM !== true || !WP2FA_License_Manager::is_premium_active()) {
        wp_send_json_error(esc_html__('Función solo disponible con licencia premium.', 'wp-2fa-authenticator'));
    }

    WP2FA_Email_Auth::send_email_code($user->ID);
    wp_send_json_success(esc_html__('Código enviado.', 'wp-2fa-authenticator'));
});
