<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/error.log');
set_time_limit(0); // Sin límite de ejecución

header('Content-Type: application/json; charset=UTF-8');
ob_start();

require __DIR__ . '/../vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$response = ['success' => false, 'enviados' => [], 'errores' => []];

try {
    $remitente    = trim($_POST['correo_de'] ?? '');
    $destinatario = trim($_POST['correo_para'] ?? '');
    $mensaje      = $_POST['mensaje'] ?? '';
    $nombres      = array_map('trim', explode(',', $_POST['cliente_nombre'] ?? ''));
    $asesor       = trim($_POST['asesor'] ?? '');
    $firmaSeleccionada = trim($_POST['firma'] ?? '');
    $area = '';

    if (!$remitente || !$destinatario || !$mensaje) {
        throw new Exception('Faltan datos obligatorios.');
    }

    $configCorreos = [
        'ventas@armandosoluciones.com.mx' => [
            'username' => 'ventas@armandosoluciones.com.mx',
            'password' => 'y3q_5urJiKjRUvyV',
            'nombre'   => 'Ventas Armando Soluciones'
        ]
    ];

    if (!isset($configCorreos[$remitente])) throw new Exception("Cuenta '$remitente' no configurada.");
    $credenciales = $configCorreos[$remitente];

    // Subida de archivos
    $adjuntosUrls = [];
    $adjuntosPaths = [];
    if (!empty($_FILES['archivo']['name'][0])) {
        $uploadDir = __DIR__ . '/uploads/';
        if (!file_exists($uploadDir)) mkdir($uploadDir, 0777, true);

        foreach ($_FILES['archivo']['name'] as $index => $nombreArchivo) {
            $tmpName = $_FILES['archivo']['tmp_name'][$index];
            if (is_uploaded_file($tmpName)) {
                $nombreSeguro = time() . "_$index_" . preg_replace('/[^a-zA-Z0-9_\.\-]/', '_', basename($nombreArchivo));
                $destino = $uploadDir . $nombreSeguro;
                if (move_uploaded_file($tmpName, $destino)) {
                    $adjuntosUrls[] = 'uploads/' . $nombreSeguro;
                    $adjuntosPaths[] = $destino;
                }
            }
        }
    }
    $adjuntoBD = implode(',', $adjuntosUrls);

    // Conexión a BD
    $pdo = new PDO("mysql:host=localhost;dbname=CORREOS;charset=utf8mb4", 'root', 'root', [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]);

    // Límite 100 correos/hora
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM CORREO 
                           WHERE REMITENTE = :remitente 
                           AND FECHA_ENVIO >= (NOW() - INTERVAL 1 HOUR)");
    $stmt->execute([':remitente' => $remitente]);
    if ($stmt->fetchColumn() >= 100) throw new Exception('Límite de 100 correos por hora alcanzado.');

    $sql = "INSERT INTO CORREO 
        (REMITENTE, DESTINATARIO, ASUNTO, MENSAJE, FECHA_ENVIO, ESTADO, ADJUNTO, MESSAGE_ID, NOMBRE, ES_NUEVO, ASESOR, FIRMA, AREA, DESTACADO)
        VALUES 
        (:remitente, :destinatario, :asunto, :mensaje, CURRENT_TIMESTAMP, 'ENVIADO', :adjunto, :message_id, :nombre, 'N', :asesor, :firma, :area, :destacado)";

    $correos = array_map('trim', explode(',', $destinatario));
    $asuntoGeneral = $_POST['asunto'] ?? 'Correo masivo';

    // Aseguramos que $nombres tenga la misma cantidad que $correos
    while (count($nombres) < count($correos)) $nombres[] = '';

    foreach ($correos as $i => $correo) {
        if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) {
            $response['errores'][] = "Correo inválido: $correo";
            continue;
        }

        $mail = new PHPMailer(true);
        try {
            $mail->isSMTP();
            $mail->SMTPAuth = true;
            $mail->Username = $credenciales['username'];
            $mail->Password = $credenciales['password'];
            $mail->CharSet = 'UTF-8';
            $mail->Encoding = 'base64';
            $mail->setFrom($credenciales['username'], $credenciales['nombre']);
            $mail->addReplyTo($remitente);

            $dominio = explode('@', $mail->Username)[1] ?? '';
            $mail->Host = ($dominio === 'armandosoluciones.com.mx') ? 'mail.armandosoluciones.com.mx' : 'smtp.' . $dominio;
            $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
            $mail->Port = 587;
            $mail->SMTPOptions = [
                'ssl' => [
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                ]
            ];

            $mail->addAddress($correo, $nombres[$i] ?: $correo);
            $mail->Subject = mb_encode_mimeheader($asuntoGeneral, 'UTF-8', 'B', "\r\n");
            $mail->isHTML(true);

            $nombreCliente = $nombres[$i] ?: $correo;

            // --- HEADER ---
            $logoPath = __DIR__ . '/../img/AS.PNG';
            if (!file_exists($logoPath)) {
                echo json_encode([
                    'success' => false,
                    'message' => "No se encontró la imagen en: $logoPath"
                ]);
                exit;
            }
            $mail->addEmbeddedImage($logoPath, 'logoCid');

            $headerHtml = '<div style="width:90%; background:#fff; text-align:center; padding:20px;">
    <img src="cid:logoCid" alt="Armando Soluciones" style="width:70%; max-width:900px; height:auto; display:block; margin:0 auto;" />
</div>';

            // --- BODY ---
            $nombreCliente = $nombres[$i] ?: $correo;
            $bodyHtml = '<div style="width:90%; margin:0 auto; font-family:Arial,sans-serif; font-size:14px; color:#333; text-align:center;">';

            // Saludo personalizado en negritas y más grande
            $bodyHtml .= '<p style="font-size:18px; font-weight:bold; margin:10px 0;">Estimado ' . htmlspecialchars($nombreCliente) . '</p>';

            // Mensaje principal centrado
            $bodyHtml .= '<p style="font-size:16px; margin:10px 0;">' . nl2br(htmlspecialchars($mensaje)) . '</p>';

            // Galería de imágenes adjuntas
            $imagenesHTML = '';
            $contadorImagenes = 0;
            foreach ($adjuntosPaths as $index => $path) {
                $tipo = mime_content_type($path);
                if (str_starts_with($tipo, 'image/')) {
                    $cid = 'img' . $index;
                    $mail->addEmbeddedImage($path, $cid, basename($path));
                    $imagenesHTML .= '
            <div style="flex:1; min-width:45%; text-align:center; margin:8px;">
                <img src="cid:' . $cid . '" style="width:100%; max-width:320px; border-radius:8px; box-shadow:0 2px 6px rgba(0,0,0,0.2);">
            </div>';
                    $contadorImagenes++;
                } else {
                    $mail->addAttachment($path);
                }
            }

            if ($contadorImagenes > 0) {
                $bodyHtml .= '
    <div style="display:flex; flex-wrap:wrap; justify-content:center; gap:10px; margin-top:25px; padding-top:15px;">
        ' . $imagenesHTML . '
    </div>';
            }

            $bodyHtml .= '</div>'; // Cierra contenedor principal del body


            // --- FOOTER / FIRMA ---
            $footerHtml = '';
            if ($firmaSeleccionada) {
                $firmaPath = realpath(__DIR__ . '/' . $firmaSeleccionada);
                if ($firmaPath) $mail->addEmbeddedImage($firmaPath, 'firmaImg');
                $footerHtml = '<div style="margin-top:15px; text-align:center;">
        <img src="cid:firmaImg" style="width:90%; max-width:900px; height:auto; display:block; margin:0 auto;">
    </div>';
            }

            // --- COMBINAR TODO ---
            $mail->Body = '<!DOCTYPE html>
<html lang="es">
<head><meta charset="UTF-8"></head>
<body>'
                . $headerHtml
                . $bodyHtml
                . $footerHtml .
                '</body></html>';


            $mail->send();
            $messageId = $mail->getLastMessageID();

            // Guardar en BD
            $stmt = $pdo->prepare($sql);
            $stmt->execute([
                ':remitente'    => $remitente,
                ':destinatario' => $correo,
                ':asunto'       => $asuntoGeneral,
                ':mensaje'      => $mensaje,
                ':adjunto'      => $adjuntoBD,
                ':message_id'   => $messageId,
                ':nombre'       => $nombreCliente,
                ':asesor'       => $asesor,
                ':firma'        => $firmaSeleccionada,
                ':area'         => $area,
                ':destacado'    => '0'
            ]);

            $response['enviados'][] = $correo;
        } catch (Exception $e) {
            error_log("PHPMailer error con $correo: " . $e->getMessage());
            $response['errores'][] = "Error con $correo: " . $e->getMessage();
        }

        // Limpiar memoria y cerrar conexión SMTP
        $mail->clearAddresses();
        $mail->clearAttachments();
        $mail->clearAllRecipients();
        $mail->smtpClose();
        $mail = null;
        gc_collect_cycles();

        // Pequeña pausa entre envíos
        sleep(1);
    }

    $response['success'] = count($response['enviados']) > 0;
} catch (Exception $e) {
    $response['message'] = $e->getMessage();
}

ob_end_clean();
echo json_encode($response);
exit;
