<?php
require_once dirname(__FILE__) . '/../config.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') { jsonErr(405, 'Metodo no permitido.'); }
$jwt   = auth();
$idinv = (int)$jwt['idinv'];
$b     = body();
$db    = getDB();

// ── Parámetros del payload ────────────────────────────────────────────────────
$tipoBase   = (int)($b['tipo_nota'] ?? ($b['tipo'] ?? 10));
$items      = $b['items'] ?? ($b['productos'] ?? []);
$pagos      = $b['pagos'] ?? [];
$cdentrega  = (int)($b['cdentrega'] ?? ($b['usuariosci_id'] ?? 8));
$cdId       = 50;
$metodoPago = $b['metodo_pago'] ?? 'efectivo';

// Datos de envío a domicilio
$idDireccionEnvio     = isset($b['id_direccion_envio']) ? (int)$b['id_direccion_envio'] : (isset($b['id_direccion']) ? (int)$b['id_direccion'] : null);
$costoEnvio           = isset($b['costo_envio'])        ? (float)$b['costo_envio']      : 0;
$skydropxCotizacionId = $b['skydropx_cotizacion_id'] ?? null;
$skydropxRateId       = $b['skydropx_rate_id']       ?? null;
$skydropxShipmentId   = $b['skydropx_shipment_id']   ?? null;
$trackingNumber       = $b['tracking_number']        ?? null;
$labelUrl             = $b['label_url']              ?? null;
$carrier              = $b['carrier']                ?? null;

// Validar tipo base
if (!in_array($tipoBase, array(10, 11))) {
    jsonErr(400, 'Tipo de nota invalido. Use 10 (venta) o 11 (por asignar).');
}
if (empty($items)) { jsonErr(400, 'Debe incluir al menos un producto.'); }
if (empty($pagos)) { jsonErr(400, 'Debe incluir al menos un pago.'); }

// ── Calcular totales ──────────────────────────────────────────────────────────
$subtotalProductos = 0; $totalPuntos = 0;
foreach ($items as $item) {
    $precio   = (float)(isset($item['precio'])  ? $item['precio']  : 0);
    $puntos   = (float)(isset($item['puntos'])  ? $item['puntos']  : 0);
    $cantidad = (int)(isset($item['cantidad'])  ? $item['cantidad'] : (isset($item['cant']) ? $item['cant'] : 1));
    $subtotalProductos += $precio  * $cantidad;
    if ($tipoBase === 10) {
        $totalPuntos += $puntos * $cantidad;
    }
}
// Total final incluye costo de envío (si aplica)
$totalVenta = $subtotalProductos + $costoEnvio;

// ── Determinar montos por método de pago ─────────────────────────────────────
$ef = 0; $dep = 0; $tar = 0; $vou = 0;
foreach ($pagos as $pago) {
    $monto = (float)(isset($pago['monto']) ? $pago['monto'] : 0);
    if (isset($pago['tipo'])) {
        $tipoPago = (int)$pago['tipo'];
        if ($tipoPago === 1) $tar += $monto;      // tarjeta
        elseif ($tipoPago === 2) $dep += $monto;   // depósito/transferencia
        elseif ($tipoPago === 3) $vou += $monto;   // voucher (corregido: era $ef)
        elseif ($tipoPago === 4) $vou += $monto;   // voucher (tipo alternativo)
        elseif ($tipoPago === 5) $tar += $monto;   // tarjeta (tipo alternativo)
        elseif ($tipoPago === 6) $ef  += $monto;   // efectivo
    } elseif (isset($pago['metodo'])) {
        $met = $pago['metodo'];
        if ($met === 'efectivo')          $ef  += $monto;
        elseif ($met === 'deposito')      $dep += $monto;
        elseif ($met === 'transferencia') $dep += $monto;
        elseif ($met === 'tarjeta')       $tar += $monto;
        elseif ($met === 'voucher')       $vou += $monto;
    }
}
if (($ef + $dep + $tar + $vou) == 0 && $totalVenta > 0) {
    if ($metodoPago === 'tarjeta')           $tar = $totalVenta;
    elseif ($metodoPago === 'transferencia') $dep = $totalVenta;
    elseif ($metodoPago === 'deposito')      $dep = $totalVenta;
    elseif ($metodoPago === 'voucher')       $vou = $totalVenta;
    else                                     $ef  = $totalVenta;
}

// ── Determinar si el pago está confirmado ────────────────────────────────────
// El pago se confirma si hay tarjeta, efectivo, o voucher puro (sin depósito pendiente)
// Si hay voucher + depósito: el voucher está pagado pero el depósito queda como porpagar
$tieneVoucher = $vou > 0;
$tieneDeposito = $dep > 0;
$tieneTarjeta = $tar > 0;
$tieneEfectivo = $ef > 0;

// Pago mixto voucher+depósito: el voucher cubre parte, el depósito queda pendiente
$esMixtoVoucherDeposito = $tieneVoucher && $tieneDeposito && !$tieneTarjeta && !$tieneEfectivo;

// El pago está confirmado si hay tarjeta, efectivo, o voucher SIN depósito pendiente
$pagoConfirmado = ($tieneTarjeta || $tieneEfectivo || ($tieneVoucher && !$esMixtoVoucherDeposito));

// ── Determinar tipo de nota real ─────────────────────────────────────────────
// Tipos: 10=venta confirmada, 11=salida confirmada, 7=venta pendiente, 8=salida pendiente
if ($tipoBase === 10) {
    $tipo = $pagoConfirmado ? 10 : 7;
} else {
    $tipo = $pagoConfirmado ? 11 : 8;
}

// ── Valores para pagovta ─────────────────────────────────────────────────────
if ($esMixtoVoucherDeposito) {
    // Voucher+depósito: el voucher se registra como pagado, el depósito queda como porpagar
    $efPago  = 0;
    $depPago = 0;  // NO se registra el depósito como pagado
    $tarPago = 0;
    $vouPago = $vou;
    $porpagar = max(0, $totalVenta - $vou);  // Lo que cubre el depósito queda pendiente
} elseif (!$pagoConfirmado) {
    $efPago  = 0; $depPago = 0; $tarPago = 0; $vouPago = 0;
    $porpagar = $totalVenta;
} else {
    $efPago  = $ef; $depPago = $dep; $tarPago = $tar; $vouPago = $vou;
    $porpagar = max(0, $totalVenta - ($ef + $dep + $tar + $vou));
}

// ── Transacción en base de datos ─────────────────────────────────────────────
$db->beginTransaction();
try {
    $fecha = date('Y-m-d');
    $hora  = date('H:i:s');

    // Consecutivo del centro 50 (app)
    $stmtC = $db->prepare('SELECT consec FROM cdconsec WHERE idcd = 50 FOR UPDATE');
    $stmtC->execute();
    $consec = (int)($stmtC->fetchColumn() ?: 0) + 1;
    $db->prepare('INSERT INTO cdconsec (idcd, consec) VALUES (50,?) ON DUPLICATE KEY UPDATE consec=?')
       ->execute(array($consec, $consec));

    // 1. transacciones
    $stmtTx = $db->prepare(
        "INSERT INTO transacciones
         (inversionista_id_inver, tipostr_idtipostr, fechat, horat,
          usuarios_ci_idusuarios_ci, consec, cdentrega, statusentrega)
         VALUES (?,?,?,?,?,?,?,'PENDIENTE')"
    );
    $stmtTx->execute(array($idinv, $tipo, $fecha, $hora, 50, $consec, $cdentrega));
    $idTx = (int)$db->lastInsertId();

    // 2. depositos
    $puntosDeposito = ($tipoBase === 10) ? $totalPuntos : 0;
    $db->prepare(
        'INSERT INTO depositos (centros_idcd, transacciones_idtransacciones, cantidad, puntos)
         VALUES (50,?,?,?)'
    )->execute(array($idTx, $totalVenta, $puntosDeposito));

    // 3. pagovta
    $db->prepare(
        'INSERT INTO pagovta (idtransacciones, efectivo, deposito, tarjeta, voucher, porpagar, abono)
         VALUES (?,?,?,?,?,?,0)'
    )->execute(array($idTx, $efPago, $depPago, $tarPago, $vouPago, $porpagar));

    // 4. depositos_transaccion — solo si el pago fue con tarjeta
    if ($tar > 0) {
        $folioMP = $b['folio_mp'] ?? $b['folio'] ?? ('MP' . time());
        $db->prepare(
            'INSERT INTO depositos_transaccion
             (idtransacciones, tipo, monto, folio, idbanco, fecha)
             VALUES (?,2,?,?,42,?)'
        )->execute(array($idTx, $tar, $folioMP, $fecha . ' ' . $hora));
    }

    // 5. pedido_real y pedido
    foreach ($items as $item) {
        $tipoItem = isset($item['tipo']) ? $item['tipo'] : 'producto';
        $cantidad = (int)(isset($item['cantidad']) ? $item['cantidad'] : (isset($item['cant']) ? $item['cant'] : 1));
        $esPaq    = ($tipoItem === 'paquete' || $tipoItem === 'promo');
        $idItem   = (int)(isset($item['id']) ? $item['id'] : 0);

        $db->prepare('INSERT INTO pedido_real (transacciones, id_prod, cant) VALUES (?,?,?)')
           ->execute(array($idTx, $idItem, $cantidad));

        if ($esPaq) {
            $stmtPP = $db->prepare(
                'SELECT pp.idprodp AS id_prod, pp.cantp AS cq FROM promop pp WHERE pp.promop = ?'
            );
            $stmtPP->execute(array($idItem));
            foreach ($stmtPP->fetchAll() as $pItem) {
                $db->prepare(
                    'INSERT INTO pedido (transacciones_idtransacciones, productos_idprod, cant) VALUES (?,?,?)'
                )->execute(array($idTx, $pItem['id_prod'], (int)$pItem['cq'] * $cantidad));
            }
        } else {
            $db->prepare(
                'INSERT INTO pedido (transacciones_idtransacciones, productos_idprod, cant) VALUES (?,?,?)'
            )->execute(array($idTx, $idItem, $cantidad));
        }

        if ($tipoBase === 11) {
            $db->prepare(
                'INSERT INTO nsalida (transacciones_idtransacciones, productos_idprod, cant, asignar)
                 VALUES (?,?,?,0)'
            )->execute(array($idTx, $idItem, $cantidad));
        }
    }

    // 6. transaccion_adicionales — solo si es envío a domicilio
    if ($cdentrega === 8 && $idDireccionEnvio) {
        $confirmaDeposito = $pagoConfirmado ? 1 : 0;
        $contactoTelInsert = trim($b['contacto_tel'] ?? '');
        $db->prepare(
            'INSERT INTO transaccion_adicionales
             (idtransacciones, fuente, id_direccionenvio, costoEnvio, confirmaDeposito, metodoPago, telefono)
             VALUES (?,?,?,?,?,?,?)'
        )->execute(array($idTx, '2', $idDireccionEnvio, $costoEnvio, $confirmaDeposito, $metodoPago, $contactoTelInsert));
    }

    // 7. Guardar datos de Skydropx
    if ($skydropxShipmentId || $skydropxCotizacionId) {
        $db->prepare(
            'UPDATE transacciones SET
               skydropx_shipment_id   = ?,
               tracking_number        = ?,
               label_url              = ?,
               carrier                = ?,
               skydropx_cotizacion_id = ?,
               skydropx_rate_id       = ?
             WHERE idtransacciones = ?'
        )->execute(array(
            $skydropxShipmentId, $trackingNumber, $labelUrl, $carrier,
            $skydropxCotizacionId, $skydropxRateId, $idTx
        ));
    }

    $db->commit();

       // ── Obtener datos del distribuidor para el correo ─────────────────────
    $stmtInv = $db->prepare(
        'SELECT nombre, appat, apmat, email, tel1 FROM inversionista WHERE id_inver = ?'
    );
    $stmtInv->execute(array($idinv));
    $inv = $stmtInv->fetch(PDO::FETCH_ASSOC);
    $nombreDist  = trim(($inv['nombre'] ?? '') . ' ' . ($inv['appat'] ?? '') . ' ' . ($inv['apmat'] ?? ''));
    $emailDest   = $inv['email'] ?? null;
    // Teléfono seleccionado en el paso de contacto
    $contactoTel = trim($b['contacto_tel'] ?? $inv['tel1'] ?? '');;

        // ── Obtener dirección de envío si aplica ─────────────────────
    $dirEnvioHtml = '';
    if ($cdentrega === 8) {
        $stmtDir = $db->prepare('SELECT * FROM direccionenvio WHERE id = ?');
        $stmtDir->execute(array($idDireccionEnvio));
        $dir = $stmtDir->fetch(PDO::FETCH_ASSOC);
        if ($dir) {
            $calleCompleta = trim(($dir['calle'] ?? '') . ' ' . ($dir['noExt'] ?? ''));
            if ($dir['noInt']) $calleCompleta .= ' Int. ' . $dir['noInt'];
            $dirEnvioHtml = '
            <tr><td colspan="2" style="padding:16px 0 8px;font-size:15px;font-weight:700;color:#1a1a1a;border-top:1px solid #e5e7eb;">
                📦 Datos de envío a domicilio
            </td></tr>
            <tr>
                <td style="padding:6px 0;color:#6b7280;font-size:14px;vertical-align:top;width:140px;">Dirección</td>
                <td style="padding:6px 0;font-size:14px;color:#1a1a1a;">' . htmlspecialchars($calleCompleta) . '<br>'
                    . htmlspecialchars($dir['colonia'] ?? '') . ', ' . htmlspecialchars($dir['ciudad'] ?? '') . '<br>'
                    . htmlspecialchars($dir['estado'] ?? '') . ' C.P. ' . htmlspecialchars($dir['cp'] ?? '') . '</td>
            </tr>';
            if ($dir['referencia']) {
                $dirEnvioHtml .= '<tr>
                    <td style="padding:6px 0;color:#6b7280;font-size:14px;">Referencia</td>
                    <td style="padding:6px 0;font-size:14px;color:#1a1a1a;">' . htmlspecialchars($dir['referencia']) . '</td>
                </tr>';
            }
            if ($costoEnvio > 0) {
                $dirEnvioHtml .= '<tr>
                    <td style="padding:6px 0;color:#6b7280;font-size:14px;">Costo de envío</td>
                    <td style="padding:6px 0;font-size:14px;color:#1a1a1a;">$' . number_format($costoEnvio, 2) . ' MXN</td>
                </tr>';
            }
            if ($trackingNumber) {
                $dirEnvioHtml .= '<tr>
                    <td style="padding:6px 0;color:#6b7280;font-size:14px;">Número de guía</td>
                    <td style="padding:6px 0;font-size:14px;font-weight:700;color:#0a7ea4;">' . htmlspecialchars($trackingNumber) . '</td>
                </tr>';
            }
            if ($carrier) {
                $dirEnvioHtml .= '<tr>
                    <td style="padding:6px 0;color:#6b7280;font-size:14px;">Paquetería</td>
                    <td style="padding:6px 0;font-size:14px;color:#1a1a1a;">' . htmlspecialchars($carrier) . '</td>
                </tr>';
            }
            if ($labelUrl) {
                $dirEnvioHtml .= '<tr>
                    <td style="padding:6px 0;color:#6b7280;font-size:14px;">Guía de envío</td>
                    <td style="padding:6px 0;font-size:14px;"><a href="' . htmlspecialchars($labelUrl) . '" style="color:#0a7ea4;font-weight:700;">Descargar guía PDF</a></td>
                </tr>';
            }
        }
    } else {
        // Centro de distribución
        $centrosNombres = array(
            5  => 'CDMX',
            17 => 'Saltillo',
            50 => 'App / Oficina central',
            53 => 'Villahermosa',
            54 => 'Cancún',
            63 => 'Guadalajara',
        );
        $nombreCentro = $centrosNombres[$cdentrega] ?? 'Centro #' . $cdentrega;
        $dirEnvioHtml = '
            <tr><td colspan="2" style="padding:16px 0 8px;font-size:15px;font-weight:700;color:#1a1a1a;border-top:1px solid #e5e7eb;">
                🏪 Punto de recolección
            </td></tr>
            <tr>
                <td style="padding:6px 0;color:#6b7280;font-size:14px;">Centro</td>
                <td style="padding:6px 0;font-size:14px;color:#1a1a1a;">' . htmlspecialchars($nombreCentro) . '</td>
            </tr>';
    }

    // ── Construir filas de productos para el correo ───────────────────────────
    $productosHtml = '';
    foreach ($items as $item) {
        $nombre   = htmlspecialchars($item['nombre'] ?? 'Producto');
        $precio   = number_format((float)($item['precio'] ?? 0), 2);
        $cantidad = (int)($item['cantidad'] ?? $item['cant'] ?? 1);
        $subtotal = number_format((float)($item['precio'] ?? 0) * $cantidad, 2);
        $tipoItem = $item['tipo'] ?? 'producto';
        $badge    = ($tipoItem === 'promo') ? ' <span style="font-size:11px;background:#FEF3C7;color:#92400E;padding:2px 6px;border-radius:4px;font-weight:700;">PROMO</span>' : '';
        $productosHtml .= '
            <tr>
                <td style="padding:10px 8px;font-size:14px;color:#1a1a1a;border-bottom:1px solid #f3f4f6;">'
                    . $nombre . $badge . '</td>
                <td style="padding:10px 8px;font-size:14px;color:#6b7280;text-align:center;border-bottom:1px solid #f3f4f6;">' . $cantidad . '</td>
                <td style="padding:10px 8px;font-size:14px;color:#6b7280;text-align:right;border-bottom:1px solid #f3f4f6;">$' . $precio . '</td>
                <td style="padding:10px 8px;font-size:14px;font-weight:600;color:#1a1a1a;text-align:right;border-bottom:1px solid #f3f4f6;">$' . $subtotal . '</td>
            </tr>';
    }

    // ── Método de pago y estado ───────────────────────────────────────────────
    $estadoPago    = $pagoConfirmado ? 'Aprobado' : 'Pendiente de confirmación';
    $estadoColor   = $pagoConfirmado ? '#15803D' : '#92400E';
    $estadoBg      = $pagoConfirmado ? '#DCFCE7' : '#FEF3C7';
    $metodoPagoStr = '';
    $partesPago = [];
    if ($vou > 0)  $partesPago[] = 'Voucher';
    if ($tar > 0)  $partesPago[] = 'Tarjeta / MercadoPago';
    if ($dep > 0)  $partesPago[] = ($metodoPago === 'transferencia') ? 'Transferencia bancaria' : 'Depósito bancario';
    if ($ef > 0)   $partesPago[] = 'Efectivo';
    $metodoPagoStr = count($partesPago) > 0 ? implode(' + ', $partesPago) : ucfirst($metodoPago);

    // ── Desglose de pago ─────────────────────────────────────────────────────
    $desgloseFilas = '';
    if ($vou > 0) {
        $desgloseFilas .= '
            <tr>
                <td style="padding:6px 8px;font-size:13px;color:#6b7280;text-align:right;">🎟️ Voucher aplicado</td>
                <td style="padding:6px 8px;font-size:14px;color:#15803D;font-weight:600;text-align:right;">-$' . number_format($vou, 2) . ' MXN</td>
            </tr>';
    }
    if ($tar > 0) {
        $desgloseFilas .= '
            <tr>
                <td style="padding:6px 8px;font-size:13px;color:#6b7280;text-align:right;">💳 Tarjeta / MercadoPago</td>
                <td style="padding:6px 8px;font-size:14px;color:#1a1a1a;text-align:right;">$' . number_format($tar, 2) . ' MXN</td>
            </tr>';
    }
    if ($dep > 0) {
        $labelDep = ($metodoPago === 'transferencia') ? '🏦 Transferencia bancaria' : '🏦 Depósito bancario';
        $desgloseFilas .= '
            <tr>
                <td style="padding:6px 8px;font-size:13px;color:#6b7280;text-align:right;">' . $labelDep . ' (pagado)</td>
                <td style="padding:6px 8px;font-size:14px;color:#1a1a1a;text-align:right;">$' . number_format($dep, 2) . ' MXN</td>
            </tr>';
    }
    if ($ef > 0) {
        $desgloseFilas .= '
            <tr>
                <td style="padding:6px 8px;font-size:13px;color:#6b7280;text-align:right;">💵 Efectivo</td>
                <td style="padding:6px 8px;font-size:14px;color:#1a1a1a;text-align:right;">$' . number_format($ef, 2) . ' MXN</td>
            </tr>';
    }
    if ($porpagar > 0) {
        $labelPendiente = ($esMixtoVoucherDeposito) ? '⏳ Pendiente (depósito/transferencia)' : '⏳ Pendiente de pago';
        $desgloseFilas .= '
            <tr style="background:#FEF3C7;">
                <td style="padding:8px 8px;font-size:13px;color:#92400E;font-weight:700;text-align:right;">' . $labelPendiente . '</td>
                <td style="padding:8px 8px;font-size:14px;color:#92400E;font-weight:700;text-align:right;">$' . number_format($porpagar, 2) . ' MXN</td>
            </tr>';
    }

    $tipoNotaStr = ($tipoBase === 10) ? 'Nota de Venta' : 'Nota de Salida';

    // ── Instrucciones de pago pendiente ───────────────────────────────────────
    $instruccionesPago = '';
    if (!$pagoConfirmado) {
        $instruccionesPago = '
        <tr><td>
            <table width="100%" cellpadding="0" cellspacing="0" style="background:#FEF3C7;border-radius:12px;padding:16px;margin:16px 0;">
                <tr><td style="font-size:14px;color:#78350F;line-height:1.6;">
                    <strong>⏳ Pago pendiente de confirmación</strong><br><br>
                    Tu pedido ha sido registrado. Para completarlo, realiza tu pago y envía el comprobante a tu centro de distribución o al correo <a href="mailto:contacto@rrbmexico.com" style="color:#0a7ea4;">contacto@rrbmexico.com</a>.<br><br>
                    Incluye tu número de transacción <strong>#' . $idTx . '</strong> en el asunto o descripción del pago.
                </td></tr>
            </table>
        </td></tr>';
    }

    // ── Puntos ganados ────────────────────────────────────────────────────────
    $puntosHtml = '';
    if ($puntosDeposito > 0 && $pagoConfirmado) {
        $puntosHtml = '
            <tr>
                <td style="padding:6px 0;color:#6b7280;font-size:14px;">Puntos acreditados</td>
                <td style="padding:6px 0;font-size:14px;font-weight:700;color:#15803D;">+' . number_format($puntosDeposito) . ' pts</td>
            </tr>';
    }

    // ── HTML del correo ───────────────────────────────────────────────────────
    $html = '<!DOCTYPE html>
<html lang="es">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Confirmación de Pedido</title></head>
<body style="margin:0;padding:0;background:#f9fafb;font-family:-apple-system,BlinkMacSystemFont,\'Segoe UI\',Roboto,sans-serif;">
<table width="100%" cellpadding="0" cellspacing="0" style="background:#f9fafb;padding:32px 16px;">
<tr><td align="center">
<table width="100%" cellpadding="0" cellspacing="0" style="max-width:600px;background:#ffffff;border-radius:16px;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,0.1);">

    <!-- Header -->
    <tr><td style="background:linear-gradient(135deg,#0a7ea4 0%,#0369a1 100%);padding:32px 32px 24px;text-align:center;">
        <img src="https://api.sistemarrb.com/rrblogo.png" alt="Real Rich Business" style="height:70px;width:auto;margin-bottom:16px;display:block;margin-left:auto;margin-right:auto;">
        <h1 style="margin:0 0 8px;font-size:26px;font-weight:800;color:#ffffff;">
            ' . ($pagoConfirmado ? '✅ Pedido Confirmado' : '📋 Pedido Registrado') . '
        </h1>
        <p style="margin:0;font-size:14px;color:rgba(255,255,255,0.85);">
            Transacción <strong>#' . $idTx . '</strong> &nbsp;·&nbsp; ' . date('d/m/Y H:i') . '
        </p>
    </td></tr>

    <!-- Saludo -->
    <tr><td style="padding:28px 32px 0;">
        <p style="margin:0;font-size:16px;color:#1a1a1a;">Hola, <strong>' . htmlspecialchars($nombreDist) . '</strong></p>
        <p style="margin:8px 0 0;font-size:14px;color:#6b7280;line-height:1.6;">
            ' . ($pagoConfirmado
                ? 'Tu pedido ha sido procesado exitosamente. A continuación encontrarás el resumen completo.'
                : 'Tu pedido ha sido registrado. El pago está pendiente de confirmación. A continuación encontrarás el resumen.') . '
        </p>
    </td></tr>

    <!-- Estado del pago -->
    <tr><td style="padding:20px 32px 0;">
        <table width="100%" cellpadding="0" cellspacing="0">
            <tr>
                <td style="padding:6px 0;color:#6b7280;font-size:14px;width:140px;">Estado del pago</td>
                <td style="padding:6px 0;">
                    <span style="background:' . $estadoBg . ';color:' . $estadoColor . ';padding:4px 12px;border-radius:20px;font-size:13px;font-weight:700;">'
                        . $estadoPago . '</span>
                </td>
            </tr>
            <tr>
                <td style="padding:6px 0;color:#6b7280;font-size:14px;">Tipo de nota</td>
                <td style="padding:6px 0;font-size:14px;color:#1a1a1a;">' . $tipoNotaStr . ' (Tipo ' . $tipo . ')</td>
            </tr>
            <tr>
                <td style="padding:6px 0;color:#6b7280;font-size:14px;">Método de pago</td>
                <td style="padding:6px 0;font-size:14px;color:#1a1a1a;">' . $metodoPagoStr . '</td>
            </tr>
            <tr>
                <td style="padding:6px 0;color:#6b7280;font-size:14px;">Consecutivo</td>
                <td style="padding:6px 0;font-size:14px;color:#1a1a1a;">' . $consec . '</td>
            </tr>
            ' . ($contactoTel ? '
            <tr>
                <td style="padding:6px 0;color:#6b7280;font-size:14px;">Teléfono de contacto</td>
                <td style="padding:6px 0;font-size:14px;color:#1a1a1a;">' . htmlspecialchars($contactoTel) . '</td>
            </tr>' : '') . '
            ' . $puntosHtml . '
            ' . $dirEnvioHtml . '
        </table>
    </td></tr>

    ' . $instruccionesPago . '

    <!-- Productos -->
    <tr><td style="padding:20px 32px 0;">
        <p style="margin:0 0 12px;font-size:15px;font-weight:700;color:#1a1a1a;">🛒 Productos adquiridos</p>
        <table width="100%" cellpadding="0" cellspacing="0" style="border-radius:8px;overflow:hidden;border:1px solid #e5e7eb;">
            <tr style="background:#f9fafb;">
                <th style="padding:10px 8px;font-size:12px;color:#6b7280;text-align:left;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;">Producto</th>
                <th style="padding:10px 8px;font-size:12px;color:#6b7280;text-align:center;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;">Cant.</th>
                <th style="padding:10px 8px;font-size:12px;color:#6b7280;text-align:right;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;">Precio</th>
                <th style="padding:10px 8px;font-size:12px;color:#6b7280;text-align:right;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;">Subtotal</th>
            </tr>
            ' . $productosHtml . '
            <tr style="background:#f9fafb;">
                <td colspan="3" style="padding:10px 8px;font-size:13px;color:#6b7280;text-align:right;">Subtotal productos</td>
                <td style="padding:10px 8px;font-size:14px;color:#1a1a1a;text-align:right;">$' . number_format($subtotalProductos, 2) . ' MXN</td>
            </tr>
            ' . ($costoEnvio > 0 ? '
            <tr style="background:#f9fafb;">
                <td colspan="3" style="padding:6px 8px;font-size:13px;color:#6b7280;text-align:right;">Costo de envío</td>
                <td style="padding:6px 8px;font-size:14px;color:#1a1a1a;text-align:right;">$' . number_format($costoEnvio, 2) . ' MXN</td>
            </tr>' : '') . '
            <tr style="background:#f9fafb;border-top:2px solid #e5e7eb;">
                <td colspan="3" style="padding:12px 8px;font-size:15px;font-weight:700;color:#1a1a1a;text-align:right;">Total a pagar</td>
                <td style="padding:12px 8px;font-size:17px;font-weight:800;color:#0a7ea4;text-align:right;">$' . number_format($totalVenta, 2) . ' MXN</td>
            </tr>
            ' . ($desgloseFilas ? '
            <tr><td colspan="4" style="padding:4px 0;"><hr style="border:none;border-top:1px solid #e5e7eb;margin:4px 0;"></td></tr>
            <tr><td colspan="4" style="padding:4px 8px 2px;font-size:12px;color:#9ca3af;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;text-align:right;">Desglose de pago</td></tr>
            ' . $desgloseFilas : '') . '
        </table>
    </td></tr>

    <!-- Footer -->
    <tr><td style="padding:28px 32px 32px;">
        <p style="margin:0 0 8px;font-size:13px;color:#9ca3af;text-align:center;">
            ¿Tienes dudas? Contáctanos en
            <a href="mailto:contacto@rrbmexico.com" style="color:#0a7ea4;">contacto@rrbmexico.com</a>
        </p>
        <p style="margin:0;font-size:12px;color:#d1d5db;text-align:center;">
            © ' . date('Y') . ' Real Rich Business · Este correo fue generado automáticamente.
        </p>
    </td></tr>

</table>
</td></tr>
</table>
</body>
</html>';

    // ── Enviar correo vía Brevo API ──────────────────────────────────────────────
    if ($emailDest) {
        $asunto = $pagoConfirmado
            ? '✅ Pedido confirmado #' . $idTx . ' - Real Rich Business'
            : '📋 Pedido registrado #' . $idTx . ' - Pago pendiente';

        $brevoApiKey = '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';
        $brevoPayload = json_encode(array(
            'sender'      => array('name' => 'Real Rich Business', 'email' => 'noreply@productosrrb.com'),
            'to'          => array(array('email' => $emailDest, 'name' => $nombreDist)),
            'replyTo'     => array('email' => 'contacto@rrbmexico.com'),
            'subject'     => $asunto,
            'htmlContent' => $html,
        ));

        $ch = curl_init('https://api.brevo.com/v3/smtp/email');
        curl_setopt_array($ch, array(
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => $brevoPayload,
            CURLOPT_HTTPHEADER     => array(
                'accept: application/json',
                'api-key: ' . $brevoApiKey,
                'content-type: application/json',
            ),
            CURLOPT_TIMEOUT        => 10,
        ));
        curl_exec($ch);
        curl_close($ch);
    }

    // ── Respuesta ─────────────────────────────────────────────────────────────
    $estadoPagoResp = $pagoConfirmado ? 'aprobado' : 'pendiente';
    jsonOk(array(
        'idtransacciones' => $idTx,
        'idtransaccion'   => $idTx,
        'consec'          => $consec,
        'tipo'            => $tipo,
        'tipo_base'       => $tipoBase,
        'total'           => $totalVenta,
        'puntos'          => $puntosDeposito,
        'estado_pago'     => $estadoPagoResp,
        'mensaje'         => $tipoBase === 10
            ? ($estadoPagoResp === 'aprobado'
                ? 'Pago aprobado. Nota de venta generada.'
                : 'Nota de venta registrada. Pago pendiente de confirmacion.')
            : ($estadoPagoResp === 'aprobado'
                ? 'Nota de salida generada.'
                : 'Nota de salida registrada. Pago pendiente de confirmacion.'),
    ));
} catch (Exception $e) {
    $db->rollBack();
    jsonErr(500, 'Error al generar la nota: ' . $e->getMessage());
}
