<?php
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: Content-Type, Authorization');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

// REGLA CRÍTICA: config.php está DOS niveles arriba desde admin/api/
require_once __DIR__ . '/../../config.php';

// ── Auth ──────────────────────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
if (!preg_match('/Bearer\s+(.+)/i', $authHeader, $m)) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Token requerido']);
    exit;
}
$token = trim($m[1]);
$db    = getDB();

$stmtSess = $db->prepare(
    "SELECT idusuarios_sist FROM admin_sessions WHERE token = ? AND expira > NOW() LIMIT 1"
);
$stmtSess->execute([$token]);
if (!$stmtSess->fetch()) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Sesión inválida']);
    exit;
}

// ── Parámetros ────────────────────────────────────────────────────────────────
$idtrans = isset($_GET['idtrans']) ? (int)$_GET['idtrans'] : 0;
if ($idtrans <= 0) {
    echo json_encode(['success' => false, 'message' => 'idtrans requerido']);
    exit;
}

// ── Datos de la transacción ───────────────────────────────────────────────────
$stmtTrans = $db->prepare("
    SELECT
        t.idtransacciones,
        t.fechat,
        t.fechae,
        t.tipostr_idtipostr                 AS tipo,
        t.statusentrega,
        t.usuarios_ci_idusuarios_ci         AS id_origen,
        uc_orig.nombre                      AS nombre_origen,
        t.cdentrega                         AS id_destino,
        uc_dest.nombre                      AS nombre_destino,
        t.consec
    FROM transacciones t
    LEFT JOIN usuarios_ci uc_orig ON uc_orig.idusuarios_ci = t.usuarios_ci_idusuarios_ci
    LEFT JOIN usuarios_ci uc_dest ON uc_dest.idusuarios_ci = t.cdentrega
    WHERE t.idtransacciones = ?
    LIMIT 1
");
$stmtTrans->execute([$idtrans]);
$trans = $stmtTrans->fetch(PDO::FETCH_ASSOC);

if (!$trans) {
    echo json_encode(['success' => false, 'message' => 'Transacción no encontrada']);
    exit;
}

// ── Productos de la transacción ───────────────────────────────────────────────
$stmtProds = $db->prepare("
    SELECT
        p.productos_idprod          AS idprod,
        pr.nombreProd               AS nombre,
        pr.presentacion,
        pr.tipoprod,
        p.cant                      AS cantidad
    FROM pedido p
    JOIN productos pr ON pr.id_prod = p.productos_idprod
    WHERE p.transacciones_idtransacciones = ?
    ORDER BY pr.nombreProd
");
$stmtProds->execute([$idtrans]);
$productos = $stmtProds->fetchAll(PDO::FETCH_ASSOC);

// Castear tipos
$totalUnidades = 0;
foreach ($productos as &$prod) {
    $prod['idprod']    = (int)$prod['idprod'];
    $prod['cantidad']  = (int)$prod['cantidad'];
    $prod['tipoprod']  = (int)$prod['tipoprod'];
    $totalUnidades    += $prod['cantidad'];
}
unset($prod);

$trans['idtransacciones'] = (int)$trans['idtransacciones'];
$trans['tipo']            = (int)$trans['tipo'];
$trans['id_origen']       = (int)$trans['id_origen'];
$trans['id_destino']      = (int)$trans['id_destino'];

echo json_encode([
    'success'        => true,
    'transaccion'    => $trans,
    'productos'      => $productos,
    'total_unidades' => $totalUnidades,
], JSON_UNESCAPED_UNICODE);
