<?php
/**
 * entrega-pendientes.php
 * Lista notas pendientes de entrega para un centro de entrega.
 *
 * GET params:
 *   cdentrega  (requerido) — ID del centro de entrega
 *   tab        = "individual" | "agrupado"  (default: individual)
 *   fecha      = YYYY-MM-DD (opcional, filtra por fecha)
 */
require_once __DIR__ . '/../../config.php';
auth();
$db = getDB();

$cdentrega = (int)($_GET['cdentrega'] ?? 0);
$tab       = $_GET['tab'] ?? 'individual';
$fecha     = $_GET['fecha'] ?? '';

if ($cdentrega === 0) {
    jsonErr('Se requiere cdentrega.');
}

try {
    $db->exec("SET NAMES utf8mb4 COLLATE utf8mb4_general_ci");

    if ($tab === 'individual') {
        // Notas tipo 10 y 11 con statusentrega = PENDIENTE
        $params = [$cdentrega];
        $fechaWhere = '';
        if ($fecha !== '') {
            $fechaWhere = " AND DATE(t.fechat) = ?";
            $params[] = $fecha;
        }

        $sql = "
            SELECT
                t.idtransacciones,
                t.fechat,
                t.tipostr_idtipostr   AS tipo,
                t.cdentrega,
                t.statusentrega,
                i.referencia,
                CONCAT(i.nombre,' ',i.appat,' ',COALESCE(i.apmat,'')) AS nombre_dist,
                COALESCE(d.puntos, 0) AS puntos,
                COALESCE(d.cantidad, 0) AS monto
            FROM transacciones t
            JOIN inversionista i ON i.id_inver = t.inversionista_id_inver
            LEFT JOIN depositos d ON d.transacciones_idtransacciones = t.idtransacciones
            WHERE t.tipostr_idtipostr IN (10, 11)
              AND t.statusentrega = 'PENDIENTE'
              AND t.cdentrega = ?
              $fechaWhere
            ORDER BY t.fechat ASC
        ";
        $stmt = $db->prepare($sql);
        $stmt->execute($params);
        $notas = $stmt->fetchAll(PDO::FETCH_ASSOC);

        // Para cada nota, obtener sus productos (de tabla pedido)
        $stmtProd = $db->prepare("
            SELECT p.productos_idprod AS id_prod, p.cant,
                   COALESCE(pr.nombreProd, pm.promodesc, CONCAT('ID:',p.productos_idprod)) AS nombre
            FROM pedido p
            LEFT JOIN productos pr ON pr.id_prod = p.productos_idprod AND p.productos_idprod < 1000
            LEFT JOIN promod pm    ON pm.id_promo = p.productos_idprod AND p.productos_idprod >= 1000
            WHERE p.transacciones_idtransacciones = ?
        ");
        foreach ($notas as &$nota) {
            $nota['idtransacciones'] = (int)$nota['idtransacciones'];
            $nota['tipo']            = (int)$nota['tipo'];
            $nota['cdentrega']       = (int)$nota['cdentrega'];
            $nota['puntos']          = (float)$nota['puntos'];
            $nota['monto']           = (float)$nota['monto'];
            $stmtProd->execute([$nota['idtransacciones']]);
            $nota['productos'] = $stmtProd->fetchAll(PDO::FETCH_ASSOC);
            foreach ($nota['productos'] as &$p) {
                $p['id_prod'] = (int)$p['id_prod'];
                $p['cant']    = (int)$p['cant'];
            }
            unset($p);
        }
        unset($nota);

        jsonOk(['notas' => $notas]);

    } else {
        // Notas tipo 15 con statusentrega = PENDIENTE
        $params = [$cdentrega];
        $fechaWhere = '';
        if ($fecha !== '') {
            $fechaWhere = " AND DATE(t.fechat) = ?";
            $params[] = $fecha;
        }

        $sql = "
            SELECT
                t.idtransacciones,
                t.fechat,
                t.cdentrega,
                t.statusentrega,
                ta.num_grupo
            FROM transacciones t
            LEFT JOIN transaccion_adicionales ta ON ta.idtransacciones = t.idtransacciones
            WHERE t.tipostr_idtipostr = 15
              AND t.statusentrega = 'PENDIENTE'
              AND t.cdentrega = ?
              $fechaWhere
            ORDER BY t.fechat ASC
        ";
        $stmt = $db->prepare($sql);
        $stmt->execute($params);
        $grupos = $stmt->fetchAll(PDO::FETCH_ASSOC);

        // Para cada grupo: obtener notas individuales y productos totales
        $stmtNotasGrupo = $db->prepare("
            SELECT pa.id_transacciones AS idtransacciones, pa.fecha_agrupacion,
                   t2.tipostr_idtipostr AS tipo, t2.statusentrega,
                   i.referencia,
                   CONCAT(i.nombre,' ',i.appat,' ',COALESCE(i.apmat,'')) AS nombre_dist,
                   COALESCE(d.puntos,0) AS puntos
            FROM pedido_agrupado pa
            JOIN transacciones t2 ON t2.idtransacciones = pa.id_transacciones
            JOIN inversionista i  ON i.id_inver = t2.inversionista_id_inver
            LEFT JOIN depositos d ON d.transacciones_idtransacciones = t2.idtransacciones
            WHERE pa.num_grupo = ?
        ");
        $stmtProdGrupo = $db->prepare("
            SELECT p.productos_idprod AS id_prod, p.cant,
                   COALESCE(pr.nombreProd, pm.promodesc, CONCAT('ID:',p.productos_idprod)) AS nombre
            FROM pedido p
            LEFT JOIN productos pr ON pr.id_prod = p.productos_idprod AND p.productos_idprod < 1000
            LEFT JOIN promod pm    ON pm.id_promo = p.productos_idprod AND p.productos_idprod >= 1000
            WHERE p.transacciones_idtransacciones = ?
        ");

        foreach ($grupos as &$g) {
            $g['idtransacciones'] = (int)$g['idtransacciones'];
            $g['cdentrega']       = (int)$g['cdentrega'];
            $g['num_grupo']       = (int)$g['num_grupo'];

            // Notas individuales del grupo
            $stmtNotasGrupo->execute([$g['num_grupo']]);
            $g['notas_individuales'] = $stmtNotasGrupo->fetchAll(PDO::FETCH_ASSOC);
            foreach ($g['notas_individuales'] as &$ni) {
                $ni['idtransacciones'] = (int)$ni['idtransacciones'];
                $ni['tipo']            = (int)$ni['tipo'];
                $ni['puntos']          = (float)$ni['puntos'];
            }
            unset($ni);

            // Productos totales (de la nota tipo 15)
            $stmtProdGrupo->execute([$g['idtransacciones']]);
            $g['productos'] = $stmtProdGrupo->fetchAll(PDO::FETCH_ASSOC);
            foreach ($g['productos'] as &$p) {
                $p['id_prod'] = (int)$p['id_prod'];
                $p['cant']    = (int)$p['cant'];
            }
            unset($p);
        }
        unset($g);

        jsonOk(['grupos' => $grupos]);
    }

} catch (Exception $e) {
    jsonErr('Error al obtener pendientes: ' . $e->getMessage());
}
