<?php
declare(strict_types=1);
require_once dirname(__FILE__) . '/../config.php';

// Sin autenticación para diagnóstico — BORRAR DESPUÉS
$idinv = (int)($_GET['idinv'] ?? 1459);
$db    = getDB();

$resultado = [];

// ── Test 1: Query principal de transacciones ──────────────────────────────
try {
    $fechaHace6Meses = date('Y-m-d', strtotime('-6 months'));
    $stmt = $db->prepare(
        'SELECT t.idtransacciones, t.nota, t.fechat, t.horat, t.consec,
                t.tipostr_idtipostr,
                COALESCE(p.efectivo,  0) AS pago_efectivo,
                COALESCE(p.deposito,  0) AS pago_deposito,
                COALESCE(p.tarjeta,   0) AS pago_tarjeta,
                COALESCE(p.voucher,   0) AS pago_voucher,
                COALESCE(p.porpagar,  0) AS por_pagar,
                COALESCE(p.efectivo,0)+COALESCE(p.deposito,0)+COALESCE(p.tarjeta,0)+COALESCE(p.voucher,0)+COALESCE(p.porpagar,0) AS total_venta,
                COALESCE(ta.costoEnvio, 0) AS costo_envio,
                t.carrier, t.tracking_number
         FROM transacciones t
         LEFT JOIN pagovta p ON p.idtransacciones = t.idtransacciones
         LEFT JOIN transaccion_adicionales ta ON ta.idtransacciones = t.idtransacciones
         WHERE t.inversionista_id_inver = ?
           AND t.tipostr_idtipostr IN (7, 8, 10, 11, 12)
           AND t.fechat >= ?
         ORDER BY t.fechat DESC, t.horat DESC
         LIMIT 5'
    );
    $stmt->execute([$idinv, $fechaHace6Meses]);
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $resultado['test1_lista'] = [
        'status' => 'OK',
        'count'  => count($rows),
        'sample' => $rows[0] ?? null,
    ];
} catch (Throwable $e) {
    $resultado['test1_lista'] = ['status' => 'ERROR', 'msg' => $e->getMessage()];
}

// ── Test 2: Query de productos de pedido_real ─────────────────────────────
$idTx = (int)($resultado['test1_lista']['sample']['idtransacciones'] ?? 0);
if ($idTx > 0) {
    try {
        $stmt2 = $db->prepare(
            'SELECT p.nombreProd AS nombre, pr.cant AS cantidad, p.precio
             FROM pedido_real pr
             LEFT JOIN productos p ON p.id_prod = pr.id_prod
             WHERE pr.transacciones = ?'
        );
        $stmt2->execute([$idTx]);
        $prods = $stmt2->fetchAll(PDO::FETCH_ASSOC);
        $resultado['test2_pedido_real'] = [
            'status'         => 'OK',
            'idtransacciones'=> $idTx,
            'count'          => count($prods),
            'sample'         => $prods[0] ?? null,
        ];
    } catch (Throwable $e) {
        $resultado['test2_pedido_real'] = ['status' => 'ERROR', 'msg' => $e->getMessage()];
    }

    // ── Test 3: Query de pedido (tabla alternativa) ───────────────────────
    try {
        $stmt3 = $db->prepare(
            'SELECT p.nombreProd AS nombre, pe.cant AS cantidad, p.precio
             FROM pedido pe
             LEFT JOIN productos p ON p.id_prod = pe.productos_idprod
             WHERE pe.transacciones_idtransacciones = ?'
        );
        $stmt3->execute([$idTx]);
        $prods3 = $stmt3->fetchAll(PDO::FETCH_ASSOC);
        $resultado['test3_pedido'] = [
            'status' => 'OK',
            'count'  => count($prods3),
            'sample' => $prods3[0] ?? null,
        ];
    } catch (Throwable $e) {
        $resultado['test3_pedido'] = ['status' => 'ERROR', 'msg' => $e->getMessage()];
    }
} else {
    $resultado['test2_pedido_real'] = ['status' => 'SKIP', 'msg' => 'No se encontraron transacciones'];
    $resultado['test3_pedido']      = ['status' => 'SKIP', 'msg' => 'No se encontraron transacciones'];
}

// ── Test 4: Verificar columnas de transacciones ───────────────────────────
try {
    $stmt4 = $db->query("SHOW COLUMNS FROM transacciones LIKE 'inversionista_id_inver'");
    $col = $stmt4->fetch(PDO::FETCH_ASSOC);
    $resultado['test4_columna_idinver'] = $col ? 'EXISTE: ' . json_encode($col) : 'NO EXISTE';
} catch (Throwable $e) {
    $resultado['test4_columna_idinver'] = 'ERROR: ' . $e->getMessage();
}

// ── Test 5: Verificar columnas de transaccion_adicionales ─────────────────
try {
    $stmt5 = $db->query("SHOW COLUMNS FROM transaccion_adicionales LIKE 'costoEnvio'");
    $col5 = $stmt5->fetch(PDO::FETCH_ASSOC);
    $resultado['test5_costoEnvio'] = $col5 ? 'EXISTE: ' . json_encode($col5) : 'NO EXISTE';
} catch (Throwable $e) {
    $resultado['test5_costoEnvio'] = 'ERROR: ' . $e->getMessage();
}

// ── Test 6: Verificar columna carrier en transacciones ────────────────────
try {
    $stmt6 = $db->query("SHOW COLUMNS FROM transacciones LIKE 'carrier'");
    $col6 = $stmt6->fetch(PDO::FETCH_ASSOC);
    $resultado['test6_carrier'] = $col6 ? 'EXISTE: ' . json_encode($col6) : 'NO EXISTE';
} catch (Throwable $e) {
    $resultado['test6_carrier'] = 'ERROR: ' . $e->getMessage();
}

header('Content-Type: application/json; charset=utf-8');
echo json_encode($resultado, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
