<?php
/**
 * Funciones de Email - Sistema de Eventos Institucionales
 * 
 * Requiere PHPMailer instalado via Composer:
 * composer require phpmailer/phpmailer
 */

// Incluir configuración de email
require_once __DIR__ . '/config_email.php';

// Asegurar que BASE_URL esté definido para construir URLs absolutas
if (!defined('BASE_URL')) {
    require_once __DIR__ . '/../config/config.php';
}

// PHPMailer solo se carga cuando se usa SMTP (no con mail() nativo)

/**
 * Obtiene los datos necesarios para los emails de un evento
 *
 * @param int $eventoId ID del evento
 * @return array Datos del evento para emails
 */
function obtenerDatosEventoParaEmail($eventoId) {
    global $pdo;
    
    try {
        // Obtener datos del evento base
        $stmt = $pdo->prepare("SELECT * FROM eventos_base WHERE id = ?");
        $stmt->execute([$eventoId]);
        $evento = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$evento) {
            return null;
        }
        
        // Obtener datos específicos según tipo de evento
        $tipoEvento = $evento['tipo_evento'];
        $nombresEvento = '';
        
        if ($tipoEvento === 'boda') {
            $stmt = $pdo->prepare("SELECT * FROM eventos_boda WHERE evento_id = ?");
            $stmt->execute([$eventoId]);
            $boda = $stmt->fetch(PDO::FETCH_ASSOC);
            if ($boda) {
                $primerNombreNovia = $boda['nombre_novia'] ? explode(' ', trim($boda['nombre_novia']))[0] : '';
                $primerNombreNovio = $boda['nombre_novio'] ? explode(' ', trim($boda['nombre_novio']))[0] : '';
                $nombresEvento = $primerNombreNovia . ' & ' . $primerNombreNovio;
            }
        } elseif ($tipoEvento === 'cumpleanos') {
            $stmt = $pdo->prepare("SELECT * FROM eventos_cumpleanos WHERE evento_id = ?");
            $stmt->execute([$eventoId]);
            $cumple = $stmt->fetch(PDO::FETCH_ASSOC);
            if ($cumple) {
                $nombresEvento = $cumple['nombre_homenajeado'] ?? 'Cumpleaños';
            }
        } elseif ($tipoEvento === 'quinceanera') {
            $stmt = $pdo->prepare("SELECT * FROM eventos_quinceanera WHERE evento_id = ?");
            $stmt->execute([$eventoId]);
            $quince = $stmt->fetch(PDO::FETCH_ASSOC);
            if ($quince) {
                $nombresEvento = $quince['nombre_quinceanera'] ?? 'Quinceañera';
            }
        } elseif ($tipoEvento === 'evento_social' || $tipoEvento === 'reunion') {
            $stmt = $pdo->prepare("SELECT * FROM eventos_evento_social WHERE evento_id = ?");
            $stmt->execute([$eventoId]);
            $social = $stmt->fetch(PDO::FETCH_ASSOC);
            if ($social) {
                $nombresEvento = $social['nombre_evento_social'] ?? $social['nombre_organizador'] ?? 'Evento';
            } else {
                $nombresEvento = $evento['descripcion'] ?? 'Evento Institucional';
            }
        }
        
        // Formatear fecha
        $fechaFormateada = '';
        if (!empty($evento['fecha_evento'])) {
            $fechaObj = DateTime::createFromFormat('Y-m-d', $evento['fecha_evento']);
            if ($fechaObj) {
                // Configurar locale para español
                $meses = [
                    1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril',
                    5 => 'Mayo', 6 => 'Junio', 7 => 'Julio', 8 => 'Agosto',
                    9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre'
                ];
                $dia = $fechaObj->format('d');
                $mes = $meses[(int)$fechaObj->format('m')];
                $anio = $fechaObj->format('Y');
                $fechaFormateada = "$dia de $mes de $anio";
            }
        }
        
        // Formatear hora
        $horaFormateada = '';
        if (!empty($evento['hora_evento'])) {
            $horaObj = DateTime::createFromFormat('H:i:s', $evento['hora_evento']);
            if (!$horaObj) {
                $horaObj = DateTime::createFromFormat('H:i', $evento['hora_evento']);
            }
            if ($horaObj) {
                $horaFormateada = $horaObj->format('H:i') . ' hrs';
            }
        }
        
        // Construir URL de imagen principal (usa BASE_URL para funcionar en cualquier dominio)
        $imagenPrincipal = '';
        $rutaFoto = $evento['foto_principal'] ?? $evento['imagen_principal'] ?? '';
        if (!empty($rutaFoto)) {
            $baseUrl = obtenerBaseUrl();
            $imagenPrincipal = $baseUrl . '/' . ltrim($rutaFoto, '/');
        }
        
        return [
            'evento' => $evento,
            'nombres_novios' => $nombresEvento,
            'fecha_evento' => $fechaFormateada,
            'hora_evento' => $horaFormateada,
            'lugar_evento' => $evento['lugar_evento'] ?? '',
            'imagen_principal' => $imagenPrincipal,
            'whatsapp_grupo' => $evento['whatsapp_grupo'] ?? ''
        ];
    } catch (\Exception $e) {
        error_log("Error obteniendo datos del evento para email: " . $e->getMessage());
        return null;
    }
}

/**
 * Construye el link de invitación para un invitado
 *
 * @param int $invitadoId ID del invitado
 * @param string $token Token del invitado
 * @return string URL completa de la invitación
 */
function construirLinkInvitacion($invitadoId, $token) {
    $baseUrl = obtenerBaseUrl();
    return $baseUrl . '/public/invitacion/index.php?id=' . $invitadoId . '&token=' . $token;
}

/**
 * Obtiene la URL base del sitio (sin trailing slash)
 * Usa BASE_URL si está definido, o la construye desde $_SERVER
 */
function obtenerBaseUrl() {
    if (defined('BASE_URL') && BASE_URL !== '') {
        return rtrim(BASE_URL, '/');
    }
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
    $host = $_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME'] ?? 'localhost';
    $scriptPath = $_SERVER['SCRIPT_NAME'] ?? '';
    $basePath = $scriptPath;
    if (strpos($basePath, '/public/') !== false) {
        $basePath = substr($basePath, 0, strpos($basePath, '/public/'));
    } elseif (strpos($basePath, '/admin/') !== false) {
        $basePath = substr($basePath, 0, strpos($basePath, '/admin/'));
    } elseif (strpos($basePath, '/includes/') !== false) {
        $basePath = substr($basePath, 0, strpos($basePath, '/includes/'));
    } else {
        $basePath = dirname(dirname($scriptPath));
    }
    if (empty($basePath) || $basePath === '/' || $basePath === '\\') {
        $basePath = '';
    }
    $basePath = str_replace('\\', '/', $basePath);
    return $protocol . '://' . $host . $basePath;
}

/**
 * Genera el HTML de la tabla de invitados para los emails
 *
 * @param array $invitados Array de invitados con su estado
 * @return string HTML de las filas de la tabla
 */
function generarTablaInvitadosEmail($invitados) {
    $html = '';
    
    foreach ($invitados as $inv) {
        $nombreCortesia = $inv['nombre_cortesia'] ?? '';
        $nombreInvitado = $inv['nombre_invitado'] ?? $inv['nombre_completo'] ?? $inv['nombre'] ?? '';
        $nombre = htmlspecialchars(trim($nombreCortesia . ' ' . $nombreInvitado));
        $tipo = $inv['tipo'] ?? 'Principal';
        $estado = $inv['estado'] ?? $inv['estado_asistencia'] ?? 'Pendiente';
        
        // Determinar color según estado
        $colorEstado = '#ffc107'; // Pendiente (amarillo)
        $textoEstado = 'Pendiente';
        $estadoLower = strtolower($estado);
        
        if ($estadoLower === 'confirmado' || $estadoLower === 'aceptado') {
            $colorEstado = '#28a745'; // Verde
            $textoEstado = 'Confirmado';
        } elseif ($estadoLower === 'rechazado' || $estadoLower === 'no_asistira') {
            $colorEstado = '#dc3545'; // Rojo
            $textoEstado = 'No Asistirá';
        }
        
        $html .= '
        <tr>
            <td style="padding: 12px; font-size: 14px; color: #333333; font-family: Arial, sans-serif; border-bottom: 1px solid #e0e0e0;">
                ' . $nombre . '
            </td>
            <td style="padding: 12px; font-size: 14px; color: #666666; font-family: Arial, sans-serif; border-bottom: 1px solid #e0e0e0;">
                ' . ucfirst($tipo) . '
            </td>
            <td style="padding: 12px; font-size: 14px; color: ' . $colorEstado . '; font-family: Arial, sans-serif; border-bottom: 1px solid #e0e0e0; font-weight: 500;">
                ' . $textoEstado . '
            </td>
        </tr>';
    }
    
    return $html;
}

/**
 * Genera la sección de WhatsApp para el email de confirmación
 *
 * @param string $whatsappGrupo Link del grupo de WhatsApp
 * @return string HTML de la sección o vacío si no hay grupo
 */
function generarSeccionWhatsappEmail($whatsappGrupo) {
    if (empty($whatsappGrupo)) {
        return '';
    }
    
    return '
    <tr>
        <td align="center" style="padding: 0 30px 25px; background-color: #ffffff;">
            <h3 style="margin: 0 0 12px; padding: 0; font-size: 17px; font-weight: 600; color: #1a5276; font-family: Arial, sans-serif;">
                ¡Únete a nuestro grupo de WhatsApp!
            </h3>
            <p style="margin: 0 0 18px; padding: 0; font-size: 14px; line-height: 1.5; color: #555555; font-family: Arial, sans-serif;">
                Mantente conectado con los organizadores y demás invitados
            </p>
            <table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
                <tr>
                    <td align="center" style="background-color: #25D366; border-radius: 6px;">
                        <a href="' . htmlspecialchars($whatsappGrupo) . '" style="display: inline-block; padding: 12px 28px; font-size: 15px; font-weight: 600; color: #ffffff !important; text-decoration: none; font-family: Arial, sans-serif;">
                            Unirse al Grupo
                        </a>
                    </td>
                </tr>
            </table>
        </td>
    </tr>';
}

/**
 * Carga y procesa un template de email
 *
 * @param string $templateName Nombre del template (sin extensión)
 * @param array $datos Datos para reemplazar en el template
 * @return string HTML procesado del email
 */
function cargarTemplateEmail($templateName, $datos) {
    $templatePath = __DIR__ . '/../templates/email-templates/' . $templateName . '.html';
    
    if (!file_exists($templatePath)) {
        error_log("Template de email no encontrado: " . $templatePath);
        return '';
    }
    
    $html = file_get_contents($templatePath);
    
    // Reemplazar placeholders
    $replacements = [
        '{{NOMBRES_NOVIOS}}' => $datos['nombres_novios'] ?? '',
        '{{NOMBRE_INVITADO}}' => $datos['nombre_invitado'] ?? '',
        '{{FECHA_EVENTO}}' => $datos['fecha_evento'] ?? '',
        '{{HORA_EVENTO}}' => $datos['hora_evento'] ?? '',
        '{{LUGAR_EVENTO}}' => $datos['lugar_evento'] ?? '',
        '{{LINK_INVITACION}}' => $datos['link_invitacion'] ?? '',
        '{{IMAGEN_PRINCIPAL}}' => $datos['imagen_principal'] ?? '',
        '{{YEAR}}' => date('Y'),
        '{{TABLA_INVITADOS}}' => $datos['tabla_invitados'] ?? '',
        '{{SECCION_WHATSAPP}}' => $datos['seccion_whatsapp'] ?? ''
    ];
    
    foreach ($replacements as $placeholder => $value) {
        $html = str_replace($placeholder, $value, $html);
    }
    
    return $html;
}

/**
 * Envía un email usando PHPMailer
 *
 * @param string $destinatario Email del destinatario
 * @param string $nombreDestinatario Nombre del destinatario
 * @param string $asunto Asunto del email
 * @param string $cuerpoHtml Cuerpo HTML del email
 * @return array ['success' => bool, 'message' => string]
 */
function enviarEmail($destinatario, $nombreDestinatario, $asunto, $cuerpoHtml) {
    // Verificar si el envío de emails está habilitado
    if (!defined('EMAIL_ENABLED') || !EMAIL_ENABLED) {
        return ['success' => false, 'message' => 'El envío de emails está deshabilitado'];
    }
    
    // Usar mail() nativo cuando USE_PHP_MAIL está activo o no hay credenciales SMTP
    $usarMailNativo = defined('USE_PHP_MAIL') && USE_PHP_MAIL;
    if (!$usarMailNativo && defined('SMTP_USERNAME') && defined('SMTP_PASSWORD')) {
        $credencialesVacias = (empty(SMTP_USERNAME) || empty(SMTP_PASSWORD) ||
            SMTP_USERNAME === 'tu-email@gmail.com' || SMTP_PASSWORD === 'tu-app-password');
        if ($credencialesVacias) {
            $usarMailNativo = true;
        }
    }
    
    if ($usarMailNativo) {
        return enviarEmailConMail($destinatario, $nombreDestinatario, $asunto, $cuerpoHtml);
    }
    
    // Usar PHPMailer con SMTP (cargar si existe)
    $phpmailerPath = __DIR__ . '/../vendor/autoload.php';
    if (file_exists($phpmailerPath)) {
        require_once $phpmailerPath;
    }
    if (!class_exists('PHPMailer\PHPMailer\PHPMailer')) {
        error_log("PHPMailer no está instalado. Usando mail() nativo como fallback.");
        return enviarEmailConMail($destinatario, $nombreDestinatario, $asunto, $cuerpoHtml);
    }
    
    try {
        $mail = new \PHPMailer\PHPMailer\PHPMailer(true);
        
        // Configuración del servidor
        $mail->isSMTP();
        $mail->Host = SMTP_HOST;
        $mail->SMTPAuth = SMTP_AUTH;
        $mail->Username = SMTP_USERNAME;
        $mail->Password = SMTP_PASSWORD;
        $mail->SMTPSecure = SMTP_SECURE;
        $mail->Port = SMTP_PORT;
        $mail->CharSet = 'UTF-8';
        
        // Debug
        $mail->SMTPDebug = defined('SMTP_DEBUG') ? SMTP_DEBUG : 0;
        
        // Remitente
        $mail->setFrom(EMAIL_FROM_ADDRESS, EMAIL_FROM_NAME);
        $mail->addReplyTo(EMAIL_REPLY_TO, EMAIL_REPLY_TO_NAME);
        
        // Destinatario
        $mail->addAddress($destinatario, $nombreDestinatario);
        
        // Contenido
        $mail->isHTML(true);
        $mail->Subject = $asunto;
        $mail->Body = $cuerpoHtml;
        $mail->AltBody = strip_tags(str_replace(['<br>', '<br/>', '<br />'], "\n", $cuerpoHtml));
        
        $mail->send();
        
        return ['success' => true, 'message' => 'Email enviado correctamente'];
        
    } catch (\Exception $e) {
        error_log("Error enviando email: " . $e->getMessage());
        return ['success' => false, 'message' => 'Error al enviar email: ' . $e->getMessage()];
    }
}

/**
 * Envía email usando la función mail() nativa de PHP
 * Usado cuando no hay credenciales SMTP o el hosting solo permite mail()
 *
 * @param string $destinatario Email del destinatario
 * @param string $nombreDestinatario Nombre del destinatario
 * @param string $asunto Asunto del email
 * @param string $cuerpoHtml Cuerpo HTML del email
 * @return array ['success' => bool, 'message' => string]
 */
function enviarEmailConMail($destinatario, $nombreDestinatario, $asunto, $cuerpoHtml) {
    $fromAddress = defined('EMAIL_FROM_ADDRESS') ? EMAIL_FROM_ADDRESS : 'noreply@' . ($_SERVER['HTTP_HOST'] ?? 'localhost');
    $fromName = defined('EMAIL_FROM_NAME') ? EMAIL_FROM_NAME : 'Sistema de Invitaciones';
    $replyTo = defined('EMAIL_REPLY_TO') ? EMAIL_REPLY_TO : $fromAddress;
    $replyToName = defined('EMAIL_REPLY_TO_NAME') ? EMAIL_REPLY_TO_NAME : $fromName;
    
    $from = '"' . addslashes($fromName) . '" <' . $fromAddress . '>';
    
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
    $headers .= "From: $from\r\n";
    $headers .= "Reply-To: " . $replyToName . " <" . $replyTo . ">\r\n";
    $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
    
    $asuntoEncoded = '=?UTF-8?B?' . base64_encode($asunto) . '?=';
    
    if (@mail($destinatario, $asuntoEncoded, $cuerpoHtml, $headers)) {
        return ['success' => true, 'message' => 'Email enviado correctamente'];
    }
    
    return ['success' => false, 'message' => 'Error al enviar email con mail()'];
}

/**
 * Envía email de invitación a un nuevo invitado
 *
 * @param int $invitadoId ID del invitado
 * @return array Resultado del envío
 */
function enviarEmailInvitacion($invitadoId) {
    global $pdo;
    
    try {
        // Obtener datos del invitado
        $stmt = $pdo->prepare("SELECT * FROM invitados WHERE id = ?");
        $stmt->execute([$invitadoId]);
        $invitado = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$invitado) {
            return ['success' => false, 'message' => 'Invitado no encontrado'];
        }
        
        if (empty($invitado['email'])) {
            return ['success' => false, 'message' => 'El invitado no tiene email registrado'];
        }
        
        // Obtener datos del evento
        $datosEvento = obtenerDatosEventoParaEmail($invitado['evento_id']);
        if (!$datosEvento) {
            return ['success' => false, 'message' => 'Evento no encontrado'];
        }
        
        // Construir nombre completo
        $nombreCompleto = trim(($invitado['nombre_cortesia'] ?? '') . ' ' . ($invitado['nombre_invitado'] ?? ''));
        
        // Preparar datos para el template
        $datos = [
            'nombres_novios' => $datosEvento['nombres_novios'],
            'nombre_invitado' => $nombreCompleto,
            'fecha_evento' => $datosEvento['fecha_evento'],
            'hora_evento' => $datosEvento['hora_evento'],
            'lugar_evento' => $datosEvento['lugar_evento'],
            'link_invitacion' => construirLinkInvitacion($invitado['id'], $invitado['token']),
            'imagen_principal' => $datosEvento['imagen_principal']
        ];
        
        // Cargar y procesar template
        $cuerpoHtml = cargarTemplateEmail('invitacion-email', $datos);
        
        if (empty($cuerpoHtml)) {
            return ['success' => false, 'message' => 'Error al cargar el template de email'];
        }
        
        // Enviar email
        $asunto = '¡Tienes una invitación de ' . $datosEvento['nombres_novios'] . '!';
        
        return enviarEmail(
            $invitado['email'],
            $nombreCompleto,
            $asunto,
            $cuerpoHtml
        );
        
    } catch (\Exception $e) {
        error_log("Error en enviarEmailInvitacion: " . $e->getMessage());
        return ['success' => false, 'message' => 'Error al procesar el email: ' . $e->getMessage()];
    }
}

/**
 * Envía email de confirmación de asistencia
 *
 * @param int $invitadoId ID del invitado principal
 * @param array $invitadosConfirmados Array de invitados que confirmaron
 * @return array Resultado del envío
 */
function enviarEmailConfirmacion($invitadoId, $invitadosConfirmados = []) {
    global $pdo;
    
    try {
        // Obtener datos del invitado principal
        $stmt = $pdo->prepare("SELECT * FROM invitados WHERE id = ?");
        $stmt->execute([$invitadoId]);
        $invitado = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$invitado) {
            return ['success' => false, 'message' => 'Invitado no encontrado'];
        }
        
        if (empty($invitado['email'])) {
            return ['success' => false, 'message' => 'El invitado no tiene email registrado'];
        }
        
        // Obtener datos del evento
        $datosEvento = obtenerDatosEventoParaEmail($invitado['evento_id']);
        if (!$datosEvento) {
            return ['success' => false, 'message' => 'Evento no encontrado'];
        }
        
        // Si no se proporcionan invitados confirmados, usar solo el principal
        if (empty($invitadosConfirmados)) {
            $invitadosConfirmados = [$invitado];
        }
        
        // Construir nombre completo
        $nombreCompleto = trim(($invitado['nombre_cortesia'] ?? '') . ' ' . ($invitado['nombre_invitado'] ?? ''));
        
        // Preparar datos para el template
        $datos = [
            'nombres_novios' => $datosEvento['nombres_novios'],
            'nombre_invitado' => $nombreCompleto,
            'fecha_evento' => $datosEvento['fecha_evento'],
            'hora_evento' => $datosEvento['hora_evento'],
            'lugar_evento' => $datosEvento['lugar_evento'],
            'link_invitacion' => construirLinkInvitacion($invitado['id'], $invitado['token']),
            'imagen_principal' => $datosEvento['imagen_principal'],
            'tabla_invitados' => generarTablaInvitadosEmail($invitadosConfirmados),
            'seccion_whatsapp' => generarSeccionWhatsappEmail($datosEvento['whatsapp_grupo'])
        ];
        
        // Cargar y procesar template
        $cuerpoHtml = cargarTemplateEmail('confirmacion-email', $datos);
        
        if (empty($cuerpoHtml)) {
            return ['success' => false, 'message' => 'Error al cargar el template de email'];
        }
        
        // Enviar email
        $asunto = '¡Confirmación de asistencia - ' . $datosEvento['nombres_novios'] . '!';
        
        return enviarEmail(
            $invitado['email'],
            $nombreCompleto,
            $asunto,
            $cuerpoHtml
        );
        
    } catch (\Exception $e) {
        error_log("Error en enviarEmailConfirmacion: " . $e->getMessage());
        return ['success' => false, 'message' => 'Error al procesar el email: ' . $e->getMessage()];
    }
}

/**
 * Envía email de inasistencia
 *
 * @param int $invitadoId ID del invitado principal
 * @param array $invitadosInasistentes Array de invitados que no asistirán
 * @return array Resultado del envío
 */
function enviarEmailInasistencia($invitadoId, $invitadosInasistentes = []) {
    global $pdo;
    
    try {
        // Obtener datos del invitado principal
        $stmt = $pdo->prepare("SELECT * FROM invitados WHERE id = ?");
        $stmt->execute([$invitadoId]);
        $invitado = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$invitado) {
            return ['success' => false, 'message' => 'Invitado no encontrado'];
        }
        
        if (empty($invitado['email'])) {
            return ['success' => false, 'message' => 'El invitado no tiene email registrado'];
        }
        
        // Obtener datos del evento
        $datosEvento = obtenerDatosEventoParaEmail($invitado['evento_id']);
        if (!$datosEvento) {
            return ['success' => false, 'message' => 'Evento no encontrado'];
        }
        
        // Si no se proporcionan invitados, usar solo el principal
        if (empty($invitadosInasistentes)) {
            $invitadosInasistentes = [$invitado];
        }
        
        // Construir nombre completo
        $nombreCompleto = trim(($invitado['nombre_cortesia'] ?? '') . ' ' . ($invitado['nombre_invitado'] ?? ''));
        
        // Preparar datos para el template
        $datos = [
            'nombres_novios' => $datosEvento['nombres_novios'],
            'nombre_invitado' => $nombreCompleto,
            'fecha_evento' => $datosEvento['fecha_evento'],
            'hora_evento' => $datosEvento['hora_evento'],
            'lugar_evento' => $datosEvento['lugar_evento'],
            'link_invitacion' => construirLinkInvitacion($invitado['id'], $invitado['token']),
            'imagen_principal' => $datosEvento['imagen_principal'],
            'tabla_invitados' => generarTablaInvitadosEmail($invitadosInasistentes)
        ];
        
        // Cargar y procesar template
        $cuerpoHtml = cargarTemplateEmail('inasistencia-email', $datos);
        
        if (empty($cuerpoHtml)) {
            return ['success' => false, 'message' => 'Error al cargar el template de email'];
        }
        
        // Enviar email
        $asunto = 'Gracias por tu respuesta - ' . $datosEvento['nombres_novios'];
        
        return enviarEmail(
            $invitado['email'],
            $nombreCompleto,
            $asunto,
            $cuerpoHtml
        );
        
    } catch (\Exception $e) {
        error_log("Error en enviarEmailInasistencia: " . $e->getMessage());
        return ['success' => false, 'message' => 'Error al procesar el email: ' . $e->getMessage()];
    }
}

/**
 * Envía emails masivos de invitación a todos los invitados de un evento
 *
 * @param int $eventoId ID del evento
 * @param bool $soloSinEnviar Solo enviar a quienes no han recibido email
 * @return array Resumen del envío masivo
 */
function enviarEmailsInvitacionMasivo($eventoId, $soloSinEnviar = true) {
    global $pdo;
    
    $resultados = [
        'total' => 0,
        'enviados' => 0,
        'fallidos' => 0,
        'sin_email' => 0,
        'errores' => []
    ];
    
    try {
        // Obtener invitados del evento
        $sql = "SELECT * FROM invitados WHERE evento_id = ?";
        if ($soloSinEnviar) {
            $sql .= " AND (email_enviado IS NULL OR email_enviado = 0)";
        }
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$eventoId]);
        $invitados = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        $resultados['total'] = count($invitados);
        
        foreach ($invitados as $invitado) {
            if (empty($invitado['email'])) {
                $resultados['sin_email']++;
                continue;
            }
            
            $resultado = enviarEmailInvitacion($invitado['id']);
            
            if ($resultado['success']) {
                $resultados['enviados']++;
                
                // Marcar como enviado
                $stmt = $pdo->prepare("UPDATE invitados SET email_enviado = 1, fecha_email_enviado = NOW() WHERE id = ?");
                $stmt->execute([$invitado['id']]);
            } else {
                $resultados['fallidos']++;
                $resultados['errores'][] = [
                    'invitado' => trim(($invitado['nombre_cortesia'] ?? '') . ' ' . ($invitado['nombre_invitado'] ?? '')),
                    'error' => $resultado['message']
                ];
            }
            
            // Pequeña pausa para no sobrecargar el servidor SMTP
            usleep(500000); // 0.5 segundos
        }
        
    } catch (\Exception $e) {
        error_log("Error en envío masivo de emails: " . $e->getMessage());
        $resultados['errores'][] = ['general' => $e->getMessage()];
    }
    
    return $resultados;
}
