<?php
/**
 * pedidos-stock.php — Lista transacciones tipo 5 (pedidos de stock) con productos
 * GET /admin/api/pedidos-stock.php
 * Opcionales: ?desde=YYYY-MM-DD&hasta=YYYY-MM-DD  (por defecto: mes actual)
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
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;
}

// ── Rango de fechas (por defecto: mes actual) ────────────────────────────────
$desde = $_GET['desde'] ?? date('Y-m-01');
$hasta = $_GET['hasta'] ?? date('Y-m-t');
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $desde)) $desde = date('Y-m-01');
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $hasta))  $hasta = date('Y-m-t');

// ── 1. Transacciones tipo 5 en el rango ─────────────────────────────────────
$stmt = $db->prepare("
    SELECT
        t.idtransacciones,
        t.usuarios_ci_idusuarios_ci  AS id_centro_pide,
        cp.nombre                    AS centro_pide,
        t.cdentrega                  AS id_centro_entrega,
        ce.nombre                    AS centro_entrega,
        t.fechat                     AS fecha_pedido,
        t.fechae                     AS fecha_entrega,
        t.statusentrega,
        t.observaciones
    FROM transacciones t
    LEFT JOIN usuarios_ci cp ON cp.idusuarios_ci = t.usuarios_ci_idusuarios_ci
    LEFT JOIN usuarios_ci ce ON ce.idusuarios_ci = t.cdentrega
    WHERE t.tipostr_idtipostr = 5
      AND t.fechat BETWEEN ? AND ?
    ORDER BY t.idtransacciones DESC
");
$stmt->execute([$desde, $hasta]);
$pedidos = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (empty($pedidos)) {
    echo json_encode([
        'ok'      => true,
        'pedidos' => [],
        'filtro'  => ['desde' => $desde, 'hasta' => $hasta],
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

// ── 2. Obtener productos de todos los pedidos en una sola consulta ───────────
$ids = array_column($pedidos, 'idtransacciones');
$placeholders = implode(',', array_fill(0, count($ids), '?'));

$stmtProd = $db->prepare("
    SELECT
        pe.transacciones_idtransacciones AS id_tx,
        p.nombreProd                     AS nombre,
        p.presentacion,
        pe.cant
    FROM pedido pe
    JOIN productos p ON p.id_prod = pe.productos_idprod
    WHERE pe.transacciones_idtransacciones IN ($placeholders)
    ORDER BY p.nombreProd
");
$stmtProd->execute($ids);
$allProds = $stmtProd->fetchAll(PDO::FETCH_ASSOC);

// Indexar productos por id_tx
$prodsPorTx = [];
foreach ($allProds as $pr) {
    $prodsPorTx[$pr['id_tx']][] = [
        'nombre'       => $pr['nombre'],
        'presentacion' => $pr['presentacion'],
        'cant'         => (int)$pr['cant'],
    ];
}

// ── 3. Adjuntar productos a cada pedido ─────────────────────────────────────
foreach ($pedidos as &$p) {
    $p['productos'] = $prodsPorTx[$p['idtransacciones']] ?? [];
}
unset($p);

echo json_encode([
    'ok'      => true,
    'pedidos' => $pedidos,
    'filtro'  => ['desde' => $desde, 'hasta' => $hasta],
], JSON_UNESCAPED_UNICODE);
