<?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; }

// Config está un nivel arriba: /admin/api/ → /admin/ → /app-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 ────────────────────────────────────────────────────────────────
$desde      = $_GET['desde']      ?? date('Y-m-01');
$hasta      = $_GET['hasta']      ?? date('Y-m-d');
$idprod     = isset($_GET['idprod'])     ? (int)$_GET['idprod']     : 0;
$centro     = isset($_GET['centro'])     ? (int)$_GET['centro']     : 0;   // usuarios_ci_idusuarios_ci
$cdentrega  = isset($_GET['cdentrega'])  ? (int)$_GET['cdentrega']  : 0;   // t.cdentrega
$fechaTipo  = (isset($_GET['fecha_tipo']) && $_GET['fecha_tipo'] === 'fechae') ? 'fechae' : 'fechat';

if ($idprod <= 0) {
    echo json_encode(['success' => false, 'message' => 'idprod requerido']);
    exit;
}

// ── WHERE dinámico ────────────────────────────────────────────────────────────
$where  = "t.tipostr_idtipostr IN (6, 10, 11)
           AND t.{$fechaTipo} BETWEEN ? AND ?
           AND p.productos_idprod = ?";
if ($fechaTipo === 'fechae') {
    $where .= " AND t.statusentrega = 'ENTREGADO'";
}
$params = [$desde . ' 00:00:00', $hasta . ' 23:59:59', $idprod];

if ($centro > 0) {
    $where   .= " AND t.usuarios_ci_idusuarios_ci = ?";
    $params[] = $centro;
}

if ($cdentrega > 0) {
    $where   .= " AND t.cdentrega = ?";
    $params[] = $cdentrega;
}

// ── Nombre del producto ───────────────────────────────────────────────────────
$stmtProd = $db->prepare("SELECT nombreProd, presentacion FROM productos WHERE id_prod = ? LIMIT 1");
$stmtProd->execute([$idprod]);
$prod = $stmtProd->fetch(PDO::FETCH_ASSOC);

// ── Consulta detalle ──────────────────────────────────────────────────────────
// Ordenar por fecha del tipo seleccionado
$orderField = $fechaTipo === 'fechae' ? 'fechae' : 'fechat';

$stmt = $db->prepare("
    SELECT
        t.idtransacciones,
        p.cant                              AS cantidad,
        t.{$orderField}                     AS fecha,
        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.tipostr_idtipostr                 AS tipo
    FROM transacciones t
    JOIN pedido p          ON p.transacciones_idtransacciones = t.idtransacciones
    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 {$where}
    ORDER BY t.{$orderField} DESC, t.idtransacciones DESC
");
$stmt->execute($params);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Castear tipos y calcular total
$total = 0;
foreach ($rows as &$row) {
    $row['idtransacciones'] = (int)$row['idtransacciones'];
    $row['cantidad']        = (int)$row['cantidad'];
    $row['id_origen']       = (int)$row['id_origen'];
    $row['id_destino']      = (int)$row['id_destino'];
    $row['tipo']            = (int)$row['tipo'];
    $total += $row['cantidad'];
}
unset($row);

echo json_encode([
    'success'  => true,
    'producto' => $prod ?: ['nombreProd' => 'Producto', 'presentacion' => ''],
    'detalle'  => $rows,
    'total'    => $total,
    'filtros'  => [
        'desde'      => $desde,
        'hasta'      => $hasta,
        'idprod'     => $idprod,
        'centro'     => $centro,
        'cdentrega'  => $cdentrega,
        'fecha_tipo' => $fechaTipo,
    ],
], JSON_UNESCAPED_UNICODE);
