<?php
/**
 * compra-debug.php
 * POST → Recibe el mismo payload que compra-guardar.php
 *        pero en lugar de ejecutar los inserts, los devuelve como texto
 *        para revisión. NO modifica la base de datos.
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Authorization, Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['ok' => false, 'error' => 'Método no permitido']);
    exit;
}

require_once __DIR__ . '/../../config.php';
$db = getDB();

// Capturar cualquier error fatal y devolverlo como JSON
set_exception_handler(function($e) {
    while (ob_get_level()) ob_end_clean();
    http_response_code(500);
    echo json_encode(['ok' => false, 'error' => 'Excepción PHP: ' . $e->getMessage() . ' en ' . basename($e->getFile()) . ':' . $e->getLine()], JSON_UNESCAPED_UNICODE);
    exit;
});
set_error_handler(function($errno, $errstr, $errfile, $errline) {
    if ($errno & (E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR)) {
        while (ob_get_level()) ob_end_clean();
        http_response_code(500);
        echo json_encode(['ok' => false, 'error' => "Error PHP ($errno): $errstr en " . basename($errfile) . ":$errline"], JSON_UNESCAPED_UNICODE);
        exit;
    }
    return false;
});
ob_start(); // Capturar cualquier output inesperado

// ── Validar token admin ───────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
if (!preg_match('/Bearer\s+(.+)/i', $authHeader, $m)) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Token requerido']);
    exit;
}
$token = trim($m[1]);
$stmtTok = $db->prepare("SELECT idusuarios_sist FROM admin_sessions WHERE token = ? AND expira > NOW()");
$stmtTok->execute([$token]);
if (!$stmtTok->fetch()) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Sesión inválida o expirada']);
    exit;
}

// ── Leer payload ──────────────────────────────────────────────────────────────
$b = json_decode(file_get_contents('php://input'), true) ?? [];

$cdId      = (int)($b['cd_id']     ?? 0);
$idinv     = (int)($b['id_inv']    ?? 0);
$tipoBase  = (int)($b['tipo_nota'] ?? 10);
$items     = $b['items']  ?? [];
$pagos     = $b['pagos']  ?? [];
$cdentrega = (int)($b['cdentrega'] ?? 8);

$envioData            = $b['envio'] ?? [];
$costoEnvio           = (int)round((float)($envioData['costo_envio'] ?? $b['costo_envio'] ?? 0));
$tipoEnvio            = $envioData['tipo'] ?? 'gratis';
$skydropxCotizacionId = $envioData['cotizacion_id'] ?? null;
$skydropxRateId       = $envioData['rate_id']       ?? null;
$carrier              = $envioData['carrier']        ?? null;
$contactoTel          = trim($envioData['contacto_tel'] ?? $b['contacto_tel'] ?? '');
$direccionEnvio       = $envioData['direccion']      ?? null;
$idDireccionEnvio     = isset($envioData['id_direccion']) ? (int)$envioData['id_direccion'] : (isset($b['id_direccion_envio']) ? (int)$b['id_direccion_envio'] : null);
$guardarDir           = !empty($envioData['guardar_dir']);
$dirData              = $envioData['direccion'] ?? [];

// ── Calcular totales ──────────────────────────────────────────────────────────
$subtotalProductos = 0;
$totalPuntos       = 0;
foreach ($items as $item) {
    $precio   = (float)($item['precio']   ?? 0);
    $puntos   = (float)($item['puntos']   ?? 0);
    $cantidad = (int)($item['cantidad']   ?? 1);
    $subtotalProductos += $precio * $cantidad;
    if ($tipoBase === 10) $totalPuntos += $puntos * $cantidad;
}
$totalVenta = $subtotalProductos + $costoEnvio;

// ── Desglosar pagos ───────────────────────────────────────────────────────────
$ef = 0; $dep = 0; $tar = 0; $vou = 0;
foreach ($pagos as $pago) {
    $monto = (float)($pago['monto'] ?? 0);
    $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;
}
// Si no hay pagos, NO asignar nada — quedará como porpagar = totalVenta

// ── Determinar tipo de nota y si el pago está confirmado ─────────────────────
$hayPagos      = ($ef + $dep + $tar + $vou) > 0;
$totalPagado   = $ef + $dep + $tar + $vou;

// Calcular porpagar primero
if (!$hayPagos) {
    $efPago = 0; $depPago = 0; $tarPago = 0; $vouPago = 0;
    $porpagar = $totalVenta;
} else {
    $efPago = $ef; $depPago = $dep; $tarPago = $tar; $vouPago = $vou;
    $porpagar = max(0, $totalVenta - $totalPagado);
}

// Tipo real: 10/11 solo si porpagar=0, de lo contrario 7/8
$pagoCompleto = ($porpagar == 0 && $hayPagos);
if ($tipoBase === 10) $tipo = $pagoCompleto ? 10 : 7;
else                  $tipo = $pagoCompleto ? 11 : 8;

// ── Obtener consecutivo actual (solo lectura) ─────────────────────────────────
$stmtC = $db->prepare('SELECT consec FROM cdconsec WHERE idcd = ?');
$stmtC->execute([$cdId]);
$consecActual = (int)($stmtC->fetchColumn() ?: 0);
$consecSiguiente = $consecActual + 1;

// ── Obtener nombre del distribuidor ──────────────────────────────────────────
$stmtInv = $db->prepare('SELECT nombre, appat, apmat, email FROM inversionista WHERE id_inver = ?');
$stmtInv->execute([$idinv]);
$inv = $stmtInv->fetch(PDO::FETCH_ASSOC);
$nombreDist = trim(($inv['nombre'] ?? '') . ' ' . ($inv['appat'] ?? '') . ' ' . ($inv['apmat'] ?? ''));

// ── Obtener nombre del centro ─────────────────────────────────────────────────
$stmtCd = $db->prepare('SELECT nombre FROM usuarios_ci WHERE idusuarios_ci = ?');
$stmtCd->execute([$cdId]);
$nombreCd = $stmtCd->fetchColumn() ?: "Centro #$cdId";

// ── Construir lista de inserts/consultas ──────────────────────────────────────
$fecha   = date('Y-m-d');
$hora    = date('H:i:s');
$idTxSim = '[AUTO_INCREMENT]';

$queries = [];

// RESUMEN
$queries[] = [
    'tipo'        => 'RESUMEN',
    'descripcion' => 'Datos calculados antes de guardar',
    'valores'     => [
        'Centro generador'     => "$cdId — $nombreCd",
        'Distribuidor'         => "$idinv — $nombreDist",
        'Tipo base solicitado' => $tipoBase,
        'Tipo nota real'       => "$tipo (" . ($pagoCompleto ? 'pago confirmado' : 'pago pendiente') . ")",
        'Subtotal productos'   => number_format($subtotalProductos, 2),
        'Costo envío'          => number_format($costoEnvio, 2),
        'Total venta'          => number_format($totalVenta, 2),
        'Efectivo'             => number_format($ef, 2),
        'Depósito'             => number_format($dep, 2),
        'Tarjeta'              => number_format($tar, 2),
        'Voucher'              => number_format($vou, 2),
        'Por pagar'            => number_format($porpagar, 2),
        'Puntos'               => $totalPuntos,
        'Consecutivo siguiente'=> $consecSiguiente,
        'Centro entrega'       => $cdentrega,
        'Tipo envío'           => $tipoEnvio,
    ],
];

// 0. cdconsec
$queries[] = [
    'tipo'  => 'UPDATE',
    'tabla' => 'cdconsec',
    'sql'   => "INSERT INTO cdconsec (idcd, consec) VALUES ($cdId, $consecSiguiente) ON DUPLICATE KEY UPDATE consec=$consecSiguiente",
    'nota'  => "Actualiza el consecutivo del centro $cdId de $consecActual a $consecSiguiente",
];

// 1. transacciones
// statusentrega = ENTREGADO cuando entrega inmediata (mismo centro) y pago completo
$statusEntrega = ($cdentrega === $cdId && $porpagar == 0) ? 'ENTREGADO' : 'PENDIENTE';
$queries[] = [
    'tipo'  => 'INSERT',
    'tabla' => 'transacciones',
    'sql'   => "INSERT INTO transacciones (inversionista_id_inver, tipostr_idtipostr, fechat, horat, usuarios_ci_idusuarios_ci, consec, cdentrega, statusentrega) VALUES ($idinv, $tipo, '$fecha', '$hora', $cdId, $consecSiguiente, $cdentrega, '$statusEntrega')",
    'nota'  => "Genera idtransacciones = $idTxSim" . ($statusEntrega === 'ENTREGADO' ? ' — statusentrega=ENTREGADO (entrega inmediata, pago completo)' : ''),
];

// 2. depositos
$puntosDeposito = ($tipoBase === 10) ? $totalPuntos : 0;
$queries[] = [
    'tipo'  => 'INSERT',
    'tabla' => 'depositos',
    'sql'   => "INSERT INTO depositos (centros_idcd, transacciones_idtransacciones, cantidad, puntos) VALUES ($cdId, $idTxSim, $totalVenta, $puntosDeposito)",
];

// 3. pagovta
$queries[] = [
    'tipo'  => 'INSERT',
    'tabla' => 'pagovta',
    'sql'   => "INSERT INTO pagovta (idtransacciones, efectivo, deposito, tarjeta, voucher, porpagar, abono) VALUES ($idTxSim, $efPago, $depPago, $tarPago, $vouPago, $porpagar, 0)",
];

// 4a. depositos_transaccion — efectivo (tipo=3, idbanco=0, folio=0)
if ($ef > 0) {
    $queries[] = [
        'tipo'  => 'INSERT',
        'tabla' => 'depositos_transaccion',
        'sql'   => "INSERT INTO depositos_transaccion (idtransacciones, id_voucher, tipo, monto, folio, idbanco, fecha) VALUES ($idTxSim, 0, 3, $ef, '0', 0, '$fecha $hora')",
        'nota'  => 'Registro de pago en efectivo',
    ];
}

// 4b. depositos_transaccion — tarjeta (tipo=2, banco 42 = Mercado Pago)
if ($tar > 0) {
    $folioMP = 'MP' . time();
    $queries[] = [
        'tipo'  => 'INSERT',
        'tabla' => 'depositos_transaccion',
        'sql'   => "INSERT INTO depositos_transaccion (idtransacciones, id_voucher, tipo, monto, folio, idbanco, fecha) VALUES ($idTxSim, 0, 2, $tar, '$folioMP', 42, '$fecha $hora')",
        'nota'  => 'Registro de pago con tarjeta (banco 42 = Mercado Pago)',
    ];
}

// 4c. depositos_transaccion — depósitos / transferencias bancarias (tipo=2)
foreach ($pagos as $pago) {
    if (($pago['metodo'] ?? '') !== 'deposito') continue;
    $montoDep  = (float)($pago['monto']   ?? 0);
    $idbancoD  = (int)($pago['idbanco']   ?? 0);
    $folioD    = trim($pago['folio']       ?? '');
    $fechaDepR = trim($pago['fecha']       ?? '');
    if ($montoDep <= 0 || !$idbancoD || $folioD === '') continue;
    $fechaDepDT = $fechaDepR ? ($fechaDepR . ' 00:00:00') : ($fecha . ' ' . $hora);
    $queries[] = [
        'tipo'  => 'INSERT',
        'tabla' => 'depositos_transaccion',
        'sql'   => "INSERT INTO depositos_transaccion (idtransacciones, id_voucher, tipo, monto, folio, idbanco, fecha) VALUES ($idTxSim, 0, 2, $montoDep, '$folioD', $idbancoD, '$fechaDepDT')",
        'nota'  => "Depósito bancario — banco ID $idbancoD",
    ];
}

// 5. pedido_real + pedido + nsalida
// Primero acumular pedido_real y nsalida (por item directo) y expandir promos para pedido agrupado
$pedidoAgrupado = []; // [id_prod => ['cant' => x, 'nombre' => '...']]

foreach ($items as $item) {
    $tipoItem = $item['tipo'] ?? 'producto';
    $cantidad = (int)($item['cantidad'] ?? 1);
    $esPaq    = ($tipoItem === 'paquete' || $tipoItem === 'promo');
    $idItem   = (int)($item['id_prod'] ?? 0);
    $nomItem  = $item['nombre'] ?? "ID $idItem";

    // pedido_real: un registro por item (producto o promo), sin agrupar
    $queries[] = [
        'tipo'  => 'INSERT',
        'tabla' => 'pedido_real',
        'sql'   => "INSERT INTO pedido_real (transacciones, id_prod, cant) VALUES ($idTxSim, $idItem, $cantidad)",
        'nota'  => "Producto/Promo: $nomItem",
    ];

    // nsalida: igual que pedido_real — id del producto o promo y cantidad directa
    if ($tipoBase === 11) {
        $queries[] = [
            'tipo'  => 'INSERT',
            'tabla' => 'nsalida',
            'sql'   => "INSERT INTO nsalida (transacciones_idtransacciones, productos_idprod, cant, asignar) VALUES ($idTxSim, $idItem, $cantidad, 0)",
            'nota'  => "nsalida tipo 11 — $nomItem",
        ];
    }

    // Acumular productos para pedido (expandiendo promos)
    if ($esPaq) {
        try {
            $stmtPP = $db->prepare('SELECT pp.idprodp AS id_prod, pp.cantp AS cq, p.nombreProd AS nombre FROM promop pp LEFT JOIN productos p ON p.id_prod = pp.idprodp WHERE pp.promop = ?');
            $stmtPP->execute([$idItem]);
            $promItems = $stmtPP->fetchAll(PDO::FETCH_ASSOC);
        } catch (Exception $ePP) {
            $promItems = [];
            $queries[] = ['tipo' => 'ADVERTENCIA', 'tabla' => 'promop', 'sql' => 'Error al consultar productos de promo ID '.$idItem.': '.$ePP->getMessage(), 'nota' => ''];
        }
        foreach ($promItems as $pItem) {
            $idProd  = (int)$pItem['id_prod'];
            $cantProd = (int)$pItem['cq'] * $cantidad;
            $nomProd  = $pItem['nombre'] ?? "ID $idProd";
            if (!isset($pedidoAgrupado[$idProd])) $pedidoAgrupado[$idProd] = ['cant' => 0, 'nombre' => $nomProd];
            $pedidoAgrupado[$idProd]['cant'] += $cantProd;
        }
    } else {
        if (!isset($pedidoAgrupado[$idItem])) $pedidoAgrupado[$idItem] = ['cant' => 0, 'nombre' => $nomItem];
        $pedidoAgrupado[$idItem]['cant'] += $cantidad;
    }
}

// INSERTs agrupados en pedido
foreach ($pedidoAgrupado as $idProd => $data) {
    $queries[] = [
        'tipo'  => 'INSERT',
        'tabla' => 'pedido',
        'sql'   => "INSERT INTO pedido (transacciones_idtransacciones, productos_idprod, cant) VALUES ($idTxSim, $idProd, {$data['cant']})",
        'nota'  => "{$data['nombre']} (total agrupado: {$data['cant']})",
    ];
}

// 5b. Descuento de stock — solo cuando pago completo (porpagar=0) Y centro de venta = centro de entrega
if ($porpagar == 0 && $cdentrega === $cdId) {
    // Recopilar todos los productos expandidos (los que van en pedido) para descontar del stock
    $stockDescuentos = []; // [id_prod => cantidad_total]
    foreach ($items as $item) {
        $tipoItem = $item['tipo'] ?? 'producto';
        $cantidad = (int)($item['cantidad'] ?? 1);
        $esPaq    = ($tipoItem === 'paquete' || $tipoItem === 'promo');
        $idItem   = (int)($item['id_prod'] ?? 0);

        if ($esPaq) {
            try {
                $stmtS = $db->prepare('SELECT pp.idprodp AS id_prod, pp.cantp AS cq FROM promop pp WHERE pp.promop = ?');
                $stmtS->execute([$idItem]);
                foreach ($stmtS->fetchAll(PDO::FETCH_ASSOC) as $pS) {
                    $idProd = (int)$pS['id_prod'];
                    $stockDescuentos[$idProd] = ($stockDescuentos[$idProd] ?? 0) + (int)$pS['cq'] * $cantidad;
                }
            } catch (Exception $eS) {
                $queries[] = ['tipo' => 'ADVERTENCIA', 'tabla' => 'stock', 'sql' => 'No se pudo expandir promo ID '.$idItem.' para stock: '.$eS->getMessage(), 'nota' => ''];
            }
        } else {
            $stockDescuentos[$idItem] = ($stockDescuentos[$idItem] ?? 0) + $cantidad;
        }
    }

    foreach ($stockDescuentos as $idProd => $cantDesc) {
        // Consultar stock actual para mostrar en debug
        $stmtStk = $db->prepare('SELECT cantidad FROM stock WHERE idcd = ? AND idprod = ?');
        $stmtStk->execute([$cdId, $idProd]);
        $rowStk = $stmtStk->fetch(PDO::FETCH_ASSOC);
        $stockActual = $rowStk ? (int)$rowStk['cantidad'] : 0;
        $stockNuevo  = $stockActual - $cantDesc;
        $queries[] = [
            'tipo'  => 'UPDATE',
            'tabla' => 'stock',
            'sql'   => "UPDATE stock SET cantidad = cantidad - $cantDesc WHERE idcd = $cdId AND idprod = $idProd",
            'nota'  => "Stock actual: $stockActual → nuevo: $stockNuevo" . ($stockNuevo < 0 ? ' ⚠️ QUEDARÍA EN NEGATIVO' : ''),
        ];
    }
}

// 6. Vouchers
$vouchersUsados = $b['vouchers'] ?? [];
foreach ($vouchersUsados as $vUsado) {
    $idv    = trim($vUsado['idv'] ?? '');
    $montoV = (float)($vUsado['monto'] ?? 0);
    if ($idv === '' || $montoV <= 0) continue;

    // Solo consultar restante y status (idv es la PK, no existe campo idvoucher)
    $stmtVou = $db->prepare('SELECT restante, status FROM voucher WHERE idv = ?');
    $stmtVou->execute([$idv]);
    $rowV = $stmtVou->fetch(PDO::FETCH_ASSOC);
    if (!$rowV) {
        $queries[] = ['tipo' => 'ADVERTENCIA', 'tabla' => 'voucher', 'sql' => "Voucher '$idv' no encontrado", 'nota' => 'No se actualizará'];
        continue;
    }
    if ((int)$rowV['status'] !== 0) {
        $queries[] = ['tipo' => 'ADVERTENCIA', 'tabla' => 'voucher', 'sql' => "Voucher '$idv' ya utilizado o inactivo (status={$rowV['status']})", 'nota' => 'No se actualizará'];
        continue;
    }
    $nuevoRestante = max(0, (float)$rowV['restante'] - $montoV);
    $nuevoStatus   = ($nuevoRestante <= 0) ? 1 : 0;
    $queries[] = [
        'tipo'  => 'UPDATE',
        'tabla' => 'voucher',
        'sql'   => "UPDATE voucher SET restante = $nuevoRestante, status = $nuevoStatus, observaciones = CONCAT(IFNULL(observaciones,''), ' TX:$idTxSim') WHERE idv = '$idv'",
        'nota'  => "Restante actual: {$rowV['restante']} → nuevo: $nuevoRestante | Status: $nuevoStatus",
    ];
    // Registrar uso del voucher en asignavoucher (idv, idtransacciones, efectivo)
    $queries[] = [
        'tipo'  => 'INSERT',
        'tabla' => 'asignavoucher',
        'sql'   => "INSERT INTO asignavoucher (idv, idtransacciones, efectivo) VALUES ($idv, $idTxSim, $montoV)",
        'nota'  => "Registro de uso del voucher $idv — monto aplicado: $montoV",
    ];
    // depositos_transaccion para voucher: tipo=4, id_voucher=idv, folio=idv, idbanco=0
    $queries[] = [
        'tipo'  => 'INSERT',
        'tabla' => 'depositos_transaccion',
        'sql'   => "INSERT INTO depositos_transaccion (idtransacciones, id_voucher, tipo, monto, folio, idbanco, fecha) VALUES ($idTxSim, $idv, 4, $montoV, '$idv', 0, '$fecha $hora')",
        'nota'  => "Pago con voucher $idv — tipo=4",
    ];
}

// 6b. Guardar nueva dirección (si se marcó el checkbox y es dirección nueva)
if ($guardarDir && !($idDireccionEnvio > 0) && !empty($dirData['calle'])) {
    $dCalle      = addslashes(trim($dirData['calle']      ?? ''));
    $dNoExt      = addslashes(trim($dirData['noExt']      ?? ''));
    $dNoInt      = addslashes(trim($dirData['noInt']      ?? ''));
    $dEntre1     = addslashes(trim($dirData['entre1']     ?? ''));
    $dEntre2     = addslashes(trim($dirData['entre2']     ?? ''));
    $dReferencia = addslashes(trim($dirData['referencia'] ?? ''));
    $dColonia    = addslashes(trim($dirData['colonia']    ?? ''));
    $dCiudad     = addslashes(trim($dirData['ciudad']     ?? ''));
    $dEstado     = addslashes(trim($dirData['estado']     ?? ''));
    $dCp         = addslashes(trim($dirData['cp']         ?? ''));
    $queries[] = [
        'tipo'  => 'INSERT',
        'tabla' => 'direccionenvio',
        'sql'   => "INSERT INTO direccionenvio (id_inver, calle, noExt, noInt, entre1, entre2, referencia, colonia, ciudad, estado, cp, pais, status) VALUES ($idinv, '$dCalle', '$dNoExt', '$dNoInt', '$dEntre1', '$dEntre2', '$dReferencia', '$dColonia', '$dCiudad', '$dEstado', '$dCp', 'México', 1)",
        'nota'  => "Nueva dirección guardada para distribuidor $idinv — id_direccionenvio = [NUEVO_AUTO_INCREMENT]",
    ];
    // El id_direccionenvio del INSERT anterior se usará en transaccion_adicionales
    $dirIdInsertFinal = '[NUEVO_AUTO_INCREMENT]';
} else {
    $dirIdInsertFinal = ($idDireccionEnvio && $idDireccionEnvio > 0) ? $idDireccionEnvio : 'NULL';
}

// 7. transaccion_adicionales (si cdentrega = 8 o 12)
if ($cdentrega === 8 || $cdentrega === 12) {
    $confirmaDeposito = $pagoCompleto ? 1 : 0;
    $metodoPago       = $pagos[0]['metodo'] ?? 'efectivo';
    $queries[] = [
        'tipo'  => 'INSERT',
        'tabla' => 'transaccion_adicionales',
        'sql'   => "INSERT INTO transaccion_adicionales (idtransacciones, fuente, id_direccionenvio, costoEnvio, confirmaDeposito, metodoPago, telefono) VALUES ($idTxSim, '2', $dirIdInsertFinal, $costoEnvio, $confirmaDeposito, '$metodoPago', '$contactoTel')",
        'nota'  => "Envío a domicilio — tipo: $tipoEnvio",
    ];
}

// 8. Skydropx (solo si hay cotización)
if ($skydropxCotizacionId || $skydropxRateId) {
    $queries[] = [
        'tipo'  => 'UPDATE',
        'tabla' => 'transacciones',
        'sql'   => "UPDATE transacciones SET skydropx_cotizacion_id = '$skydropxCotizacionId', skydropx_rate_id = '$skydropxRateId', carrier = '$carrier' WHERE idtransacciones = $idTxSim",
        'nota'  => 'Datos de cotización Skydropx',
    ];
}

// 9. Correo
$queries[] = [
    'tipo'        => 'CORREO',
    'descripcion' => 'Envío de correo al distribuidor',
    'valores'     => [
        'Destinatario' => ($inv['email'] ?? 'Sin email registrado'),
        'Nombre'       => $nombreDist,
        'Asunto'       => $pagoCompleto ? "✅ Pedido confirmado #[AUTO] - Real Rich Business" : "📋 Pedido registrado #[AUTO] - Pago pendiente",
        'Estado pago'  => $pagoCompleto ? 'Confirmado' : 'Pendiente',
    ],
];

// Limpiar cualquier output inesperado antes de enviar la respuesta
$unexpectedOutput = ob_get_clean();
if ($unexpectedOutput) {
    // Hubo output inesperado (warnings, notices, etc.) — incluirlo como advertencia
    $queries[] = [
        'tipo'  => 'ADVERTENCIA',
        'tabla' => 'PHP_OUTPUT',
        'sql'   => htmlspecialchars($unexpectedOutput),
        'nota'  => 'Output inesperado de PHP (puede indicar un warning o notice)',
    ];
}

echo json_encode([
    'ok'      => true,
    'modo'    => 'DEBUG — ningún cambio fue guardado en la base de datos',
    'queries' => $queries,
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
