<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
require_once dirname(__FILE__) . '/../config.php';

$db = getDB();
$idinv = 1459; // PETM570706

$mesInicio = date('Y-m-01');
$mesFin    = date('Y-m-t');

echo "=== COMPARACIÓN DE CONSULTAS ===\n";
echo "Usuario: $idinv\n";
echo "Período: $mesInicio a $mesFin\n\n";

// 1. Obtener directos
$stmtIds = $db->prepare('SELECT id_inver FROM inversionista WHERE idprom = ?');
$stmtIds->execute([$idinv]);
$idsDirectos = $stmtIds->fetchAll(PDO::FETCH_COLUMN);

echo "Directos encontrados: " . count($idsDirectos) . "\n";
if (empty($idsDirectos)) {
    echo "ERROR: No hay directos!\n";
    exit;
}

$ids = $idsDirectos;
$placeholders = implode(',', array_fill(0, count($ids), '?'));
$params = array_merge($ids, [$mesInicio, $mesFin]);

// 2. CONSULTA DEL DASHBOARD (con HAVING)
echo "\n=== DASHBOARD QUERY (HAVING) ===\n";
$sql1 = "SELECT COUNT(*) FROM (
    SELECT t.inversionista_id_inver
    FROM transacciones t
    JOIN depositos d ON d.transacciones_idtransacciones = t.idtransacciones
    WHERE t.inversionista_id_inver IN ($placeholders)
      AND (t.tipostr_idtipostr = 10 OR t.tipostr_idtipostr = 12)
      AND t.fechat BETWEEN ? AND ?
    GROUP BY t.inversionista_id_inver
    HAVING SUM(d.puntos) >= 624
 ) AS cal";
echo "SQL: $sql1\n";
$stmtCal = $db->prepare($sql1);
$stmtCal->execute($params);
$countDashboard = (int)$stmtCal->fetchColumn();
echo "Resultado: $countDashboard calificados\n";

// 3. CONSULTA DEL CALIFICADOS.PHP (con mapeo)
echo "\n=== CALIFICADOS.PHP QUERY (MAPEO) ===\n";
$sql2 = "SELECT t.inversionista_id_inver AS id_inver,
        COALESCE(SUM(d.puntos), 0) AS puntos
 FROM transacciones t
 JOIN depositos d ON d.transacciones_idtransacciones = t.idtransacciones
 WHERE t.inversionista_id_inver IN ($placeholders)
   AND (t.tipostr_idtipostr = 10 OR t.tipostr_idtipostr = 12)
   AND t.fechat BETWEEN ? AND ?
 GROUP BY t.inversionista_id_inver";
echo "SQL: $sql2\n";
$stmtPts = $db->prepare($sql2);
$stmtPts->execute($params);
$puntosMap = $stmtPts->fetchAll();
echo "Resultado: " . count($puntosMap) . " directos con puntos\n";

$calificadosCount = 0;
foreach ($puntosMap as $p) {
    echo "  id_inver=" . $p['id_inver'] . " puntos=" . $p['puntos'];
    if ((float)$p['puntos'] >= 624) {
        echo " ✓ CALIFICADO";
        $calificadosCount++;
    }
    echo "\n";
}
echo "Total calificados (>= 624): $calificadosCount\n";

// 4. Verificar si hay diferencia en los JOINs
echo "\n=== VERIFICAR INTEGRIDAD DE DATOS ===\n";
$sql3 = "SELECT COUNT(*) FROM transacciones WHERE inversionista_id_inver IN ($placeholders) AND fechat BETWEEN ? AND ?";
$stmtTx = $db->prepare($sql3);
$stmtTx->execute($params);
echo "Total transacciones en el período: " . $stmtTx->fetchColumn() . "\n";

$sql4 = "SELECT COUNT(*) FROM depositos WHERE transacciones_idtransacciones IN (
    SELECT idtransacciones FROM transacciones 
    WHERE inversionista_id_inver IN ($placeholders) AND fechat BETWEEN ? AND ?
)";
$stmtDep = $db->prepare($sql4);
$stmtDep->execute($params);
echo "Total depósitos asociados: " . $stmtDep->fetchColumn() . "\n";

// 5. Mostrar algunos registros de ejemplo
echo "\n=== MUESTRA DE TRANSACCIONES ===\n";
$sql5 = "SELECT t.idtransacciones, t.inversionista_id_inver, t.tipostr_idtipostr, t.fechat, 
                COALESCE(d.puntos, 0) as puntos
         FROM transacciones t
         LEFT JOIN depositos d ON d.transacciones_idtransacciones = t.idtransacciones
         WHERE t.inversionista_id_inver IN ($placeholders) AND t.fechat BETWEEN ? AND ?
         LIMIT 5";
$stmtSample = $db->prepare($sql5);
$stmtSample->execute($params);
$samples = $stmtSample->fetchAll();
foreach ($samples as $s) {
    echo "tx=" . $s['idtransacciones'] . " inv=" . $s['inversionista_id_inver'] . 
         " tipo=" . $s['tipostr_idtipostr'] . " fecha=" . $s['fechat'] . 
         " puntos=" . $s['puntos'] . "\n";
}
if (empty($samples)) {
    echo "(sin transacciones en el período)\n";
}
