<?php
// modules/auxiliar/send_email_administrativo_handler.php

require_once '../../includes/auth.php';
require_once '../../includes/database.php';
require_once '../../includes/send_email.php';
requireRole('auxiliar');

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $destinatarios = $_POST['destinatarios'] ?? [];
    
    // Validar que se haya seleccionado al menos un destinatario
    if (empty($destinatarios)) {
        $_SESSION['error'] = 'Debes seleccionar al menos un destinatario';
        header("Location: correo_administrativo.php");
        exit;
    }
    
    $to = implode(',', $destinatarios);
    $subject = $_POST['subject'] ?? '';
    $message = $_POST['message'] ?? '';
    
    // Validación básica
    if (empty($subject) || empty($message)) {
        $_SESSION['error'] = 'Asunto y mensaje son obligatorios';
        header("Location: correo_administrativo.php");
        exit;
    }
    
    // Obtener nombre del auxiliar para la firma
    $auxiliarNombre = $_SESSION['user_name'] ?? 'Auxiliar';
    
    // Agregar firma personalizada al mensaje
    $messageHTML = nl2br($message);
    $messageHTML .= "<br><br>";
    $messageHTML .= "<div style='border-top: 1px solid #eaeaea; padding-top: 15px; margin-top: 20px; color: #666; font-size: 14px;'>";
    $messageHTML .= "<strong>Enviado por:</strong> {$auxiliarNombre}<br>";
    $messageHTML .= "<strong>Rol:</strong> Auxiliar<br>";
    $messageHTML .= "<strong>Colegio:</strong> " . APP_NAME;
    $messageHTML .= "</div>";

    // Enviar correo
    $success = false;
    $emails = array_filter(array_map('trim', explode(',', $to)));
    $validEmails = [];
    
    foreach ($emails as $email) {
        if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $validEmails[] = $email;
        }
    }
    
    if (!empty($validEmails)) {
        $to = implode(',', $validEmails);
        $success = sendEmail($to, $subject, $messageHTML, true, [], $auxiliarNombre);
    } else {
        $_SESSION['error'] = 'No se encontraron direcciones de correo válidas';
        header("Location: correo_administrativo.php");
        exit;
    }

    // Registrar en base de datos
    global $db;
    
    // Iniciar transacción para garantizar consistencia
    $db->beginTransaction();
    
    try {
        // Insertar correo y obtener su ID real
        $correoId = $db->insert('correos_enviados', [
            'asunto' => $subject,
            'mensaje' => $messageHTML,
            'destinatarios' => $to,
            'adjuntos' => 0,
            'enviado_por' => $_SESSION['user_id'],
            'fecha_envio' => date('Y-m-d H:i:s'),
            'estado' => $success ? 'enviado' : 'fallido'
        ]);
        
        // Crear notificaciones para cada destinatario
        $titulo = "Nuevo comunicado administrativo";
        $mensaje = "Tienes un nuevo mensaje de $auxiliarNombre: \"$subject\"";
        
        foreach ($validEmails as $email) {
            // Obtener ID de usuario por email
            $usuario = $db->fetchOne("SELECT id FROM usuarios WHERE email = ?", [$email]);
            
            if ($usuario) {
                $db->insert('notificaciones', [
                    'usuario_id' => $usuario['id'],
                    'titulo' => $titulo,
                    'mensaje' => $mensaje,
                    'tipo' => 'administrativo',
                    'fecha_envio' => date('Y-m-d H:i:s'),
                    'leida' => 0,
                    // Usar el ID REAL del correo en el enlace
                    'enlace' => "ver_correo.php?correo_id=" . $correoId
                ]);
            }
        }
        
        // Confirmar transacción
        $db->commit();
    } catch (Exception $e) {
        // Revertir en caso de error
        $db->rollBack();
        $_SESSION['error'] = 'Error al guardar en la base de datos: ' . $e->getMessage();
        header("Location: correo_administrativo.php");
        exit;
    }

    // Mensaje de resultado
    if ($success) {
        $_SESSION['success'] = "Correo enviado correctamente a los destinatarios seleccionados";
    } else {
        $_SESSION['error'] = 'Error al enviar el correo';
    }
    
    // Redirigir de vuelta al formulario
    header("Location: correo_administrativo.php");
    exit;
}

// Si se accede directamente sin POST
$_SESSION['error'] = 'Acceso no autorizado';
header('Location: correo_administrativo.php');
exit;