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

$db = getDB();

// Usar el usuario de prueba (idinv=1459 = PETM570706)
$idinv = isset($_GET['idinv']) ? (int)$_GET['idinv'] : 1459;

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

echo "=== USUARIO idinv=$idinv ===\n";
echo "Periodo: $mesInicio a $mesFin\n\n";

// 1. Directos del usuario
$s = $db->prepare('SELECT id_inver, nombre FROM inversionista WHERE idprom = ? LIMIT 10');
$s->execute([$idinv]);
$directos = $s->fetchAll();
echo "Directos encontrados: " . count($directos) . "\n";
foreach ($directos as $d) {
    echo "  - id_inver=" . $d['id_inver'] . " nombre=" . $d['nombre'] . "\n";
}

// 2. Calificados según dashboard (subquery con HAVING)
if (!empty($directos)) {
    $ids = array_column($directos, 'id_inver');
    $placeholders = implode(',', array_fill(0, count($ids), '?'));
    $params = array_merge($ids, [$mesInicio, $mesFin]);

    $s = $db->prepare(
        "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"
    );
    $s->execute($params);
    echo "\nCalificados (dashboard HAVING): " . $s->fetchColumn() . "\n";

    // 3. Puntos por directo (como lo hace calificados.php)
    $s2 = $db->prepare(
        "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"
    );
    $s2->execute($params);
    $puntosMap = $s2->fetchAll();
    echo "\nPuntos por directo (calificados.php):\n";
    foreach ($puntosMap as $p) {
        echo "  id_inver=" . $p['id_inver'] . " puntos=" . $p['puntos'] . "\n";
    }
    if (empty($puntosMap)) {
        echo "  (ninguno tiene puntos en el periodo)\n";
    }
}

// 4. Verificar si hay transacciones en la tabla para los directos
echo "\n=== TRANSACCIONES RECIENTES (cualquier tipo) ===\n";
if (!empty($directos)) {
    $ids = array_column($directos, 'id_inver');
    $placeholders = implode(',', array_fill(0, count($ids), '?'));
    $s = $db->prepare(
        "SELECT 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)
         ORDER BY t.fechat DESC LIMIT 5"
    );
    $s->execute($ids);
    $txs = $s->fetchAll();
    foreach ($txs as $t) {
        echo "  id_inver=" . $t['inversionista_id_inver'] . 
             " tipo=" . $t['tipostr_idtipostr'] . 
             " fecha=" . $t['fechat'] . 
             " puntos=" . $t['puntos'] . "\n";
    }
    if (empty($txs)) echo "  (sin transacciones)\n";
}
