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

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

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

// Límite de 3 meses atrás para las transacciones (optimización de velocidad)
$hace3meses = date('Y-m-d', strtotime('-3 months'));

// -------------------------------------------------------
// 1. Puntos del mes actual (solo tipo 10=venta, 12=asignacion)
// -------------------------------------------------------
$stmtPts = $db->prepare(
    'SELECT COALESCE(SUM(d.puntos), 0) AS puntos
     FROM transacciones t
     JOIN depositos d ON t.idtransacciones = d.transacciones_idtransacciones
     WHERE t.inversionista_id_inver = ?
       AND (t.tipostr_idtipostr = 10 OR t.tipostr_idtipostr = 12)
       AND t.fechat BETWEEN ? AND ?'
);
$stmtPts->execute(array($idinv, $mesInicio, $mesFin));
$puntos = (float)$stmtPts->fetchColumn();

// -------------------------------------------------------
// 2. Ganancias pendientes de cobro (regs2.status = 0)
// -------------------------------------------------------
$stmtGan = $db->prepare(
    'SELECT COALESCE(SUM(apagar), 0) FROM regs2 WHERE id_inver = ? AND status = 0'
);
$stmtGan->execute(array($idinv));
$gananciasPendientes = (float)$stmtGan->fetchColumn();

// -------------------------------------------------------
// 3. Ultimas transacciones de los últimos 3 meses
//    Consulta exacta del negocio: fecha, tipo, puntos, estatus
// -------------------------------------------------------
$stmtTx = $db->prepare(
    'SELECT t.idtransacciones,
            t.fechat                AS fechat,
            t.tipostr_idtipostr     AS tipostr_idtipostr,
            COALESCE(d.puntos, 0)   AS puntos,
            COALESCE(d.cantidad, 0) AS total,
            t.statusentrega         AS statusentrega
     FROM transacciones t
     JOIN depositos d ON t.idtransacciones = d.transacciones_idtransacciones
     WHERE t.inversionista_id_inver = ?
       AND t.fechat >= ?
     ORDER BY t.idtransacciones DESC
     LIMIT 30'
);
$stmtTx->execute(array($idinv, $hace3meses));
$ultimas = $stmtTx->fetchAll();

// -------------------------------------------------------
// 4. Total de directos (primer nivel)
// -------------------------------------------------------
$stmtDir = $db->prepare('SELECT COUNT(*) FROM inversionista WHERE idprom = ?');
$stmtDir->execute(array($idinv));
$directos = (int)$stmtDir->fetchColumn();

// -------------------------------------------------------
// 5. Directos calificados este mes (>= 624 puntos, tipo 10 o 12)
//    Optimizado: primero obtenemos los id_inver de los directos,
//    luego sumamos sus puntos en una sola consulta con IN()
// -------------------------------------------------------
$calificados = 0;
$stmtIds = $db->prepare('SELECT id_inver FROM inversionista WHERE idprom = ?');
$stmtIds->execute(array($idinv));
$idsDirectos = $stmtIds->fetchAll(PDO::FETCH_COLUMN);

if (!empty($idsDirectos)) {
    $placeholders = implode(',', array_fill(0, count($idsDirectos), '?'));
    $params = array_merge($idsDirectos, array($mesInicio, $mesFin));
    $stmtCal = $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"
    );
    $stmtCal->execute($params);
    $calificados = (int)$stmtCal->fetchColumn();
}

jsonOk(array(
    'puntos_mes'            => $puntos,
    'ganancias_pendientes'  => $gananciasPendientes,
    'directos_calificados'  => $calificados,
    'directos_red'          => $directos,
    'ultimas_transacciones' => $ultimas,
));
