<?php
/**
 * entrega-pendientes.php
 * Lista notas pendientes de entrega para un centro de entrega.
 *
 * GET params:
 *   cdentrega  (requerido)
 *   tab        = "individual" | "agrupado"  (default: individual)
 *   fecha      = YYYY-MM-DD (opcional)
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Authorization, Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }

require_once __DIR__ . '/../../config.php';
$db = getDB();

// ── Validar token ─────────────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
if (!preg_match('/Bearer\s+(.+)/i', $authHeader, $m)) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Token requerido']);
    exit;
}
$token = trim($m[1]);
$stmtTok = $db->prepare("SELECT idusuarios_sist FROM admin_sessions WHERE token = ? AND expira > NOW()");
$stmtTok->execute([$token]);
if (!$stmtTok->fetch()) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Sesión inválida o expirada']);
    exit;
}

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

if ($cdentrega === 0) {
    http_response_code(400);
    echo json_encode(['ok' => false, 'success' => false, 'message' => 'Se requiere cdentrega.']);
    exit;
}

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

    if ($tab === 'individual') {
        $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);

        $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);

        echo json_encode(['ok' => true, 'success' => true, 'data' => ['notas' => $notas]]);

    } else {
        $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);

        $stmtNotasGrupo = $db->prepare("
            SELECT pa.id_transacciones AS idtransacciones,
                   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'];

            $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);

            $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);

        echo json_encode(['ok' => true, 'success' => true, 'data' => ['grupos' => $grupos]]);
    }

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['ok' => false, 'success' => false, 'message' => 'Error al obtener pendientes: ' . $e->getMessage()]);
}
