<?php
header('Content-Type: application/json');
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; }

require_once __DIR__ . '/../../config.php';

// ── Verificar token admin ─────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
$token      = str_replace('Bearer ', '', $authHeader);
if (empty($token)) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Token requerido']);
    exit;
}

$db  = getDB();
$now = date('Y-m-d H:i:s');
$stmtSess = $db->prepare(
    "SELECT s.idusuarios_sist FROM admin_sessions s
     WHERE s.token = ? AND s.expira > ? LIMIT 1"
);
$stmtSess->execute([$token, $now]);
if (!$stmtSess->fetch()) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Sesión inválida']);
    exit;
}

// ── Parámetros ────────────────────────────────────────────────────────────────
$centroFiltro = isset($_GET['centro']) ? (int)$_GET['centro'] : -1; // -1 = todos

// ── 1. Obtener centros con stock = 1 ─────────────────────────────────────────
$centros = $db->query("
    SELECT idusuarios_ci, nombre, tipo_usuario
    FROM usuarios_ci
    WHERE stock = 1
    ORDER BY idusuarios_ci
")->fetchAll(PDO::FETCH_ASSOC);

// ── 2. Obtener productos activos con tipoprod 1 y 2 ───────────────────────────
$productos = $db->query("
    SELECT id_prod, nombreProd, codigo, presentacion, tipoprod
    FROM productos
    WHERE activo = 'SI'
      AND tipoprod IN (1, 2)
    ORDER BY nombreProd
")->fetchAll(PDO::FETCH_ASSOC);

// Construir set de IDs de productos válidos para filtrar el stock
$prodIds = array_column($productos, 'id_prod');
$prodIdsStr = implode(',', array_map('intval', $prodIds));
if (empty($prodIds)) $prodIdsStr = '0';

// Construir set de IDs de centros válidos (stock = 1)
$centroIds = array_column($centros, 'idusuarios_ci');
$centroIdsStr = implode(',', array_map('intval', $centroIds));
if (empty($centroIds)) $centroIdsStr = '0';

// ── 3. Obtener stock actual (solo centros con stock=1 y productos activos 1/2) ─
$whereStock = "WHERE s.idcd IN ({$centroIdsStr}) AND s.idprod IN ({$prodIdsStr})";
if ($centroFiltro >= 0) {
    $whereStock .= " AND s.idcd = " . (int)$centroFiltro;
}

$stockRows = $db->query("
    SELECT
        s.idcd,
        s.idprod,
        s.cantidad,
        p.nombreProd,
        p.codigo,
        p.presentacion,
        p.tipoprod,
        uc.nombre AS nombre_centro
    FROM stock s
    JOIN productos p ON p.id_prod = s.idprod
    LEFT JOIN usuarios_ci uc ON uc.idusuarios_ci = s.idcd
    {$whereStock}
    ORDER BY p.nombreProd, s.idcd
")->fetchAll(PDO::FETCH_ASSOC);

// ── 4. Construir matriz producto × centro ─────────────────────────────────────
$stockMap = [];
$centrosConStock = [];

// Centros excluidos de los totales globales
$centrosExcluidosTotales = [1, 6];

foreach ($stockRows as $row) {
    $idprod = (int)$row['idprod'];
    $idcd   = (int)$row['idcd'];
    if (!isset($stockMap[$idprod])) {
        $stockMap[$idprod] = [
            'idprod'         => $idprod,
            'nombre'         => $row['nombreProd'],
            'codigo'         => $row['codigo'],
            'presentacion'   => $row['presentacion'],
            'tipoprod'       => (int)$row['tipoprod'],
            'centros'        => [],
            'total'          => 0,
            'tiene_negativo' => false,
        ];
    }
    $cant = (int)$row['cantidad'];
    $stockMap[$idprod]['centros'][$idcd] = $cant;

    // Total por producto: excluir centros 1 y 6
    if (!in_array($idcd, $centrosExcluidosTotales)) {
        $stockMap[$idprod]['total'] += $cant;
    }

    if ($cant < 0) {
        $stockMap[$idprod]['tiene_negativo'] = true;
    }
    $centrosConStock[$idcd] = $row['nombre_centro'] ?? "Centro {$idcd}";
}

// ── 5. Resumen por centro ─────────────────────────────────────────────────────
$resumenCentros = [];
foreach ($centrosConStock as $idcd => $nombreCentro) {
    $total = 0;
    $productos_count = 0;
    foreach ($stockMap as $prod) {
        if (isset($prod['centros'][$idcd])) {
            $total += $prod['centros'][$idcd];
            if ($prod['centros'][$idcd] > 0) $productos_count++;
        }
    }
    $resumenCentros[] = [
        'idcd'            => $idcd,
        'nombre'          => $nombreCentro,
        'total_piezas'    => $total,
        'total_productos' => $productos_count,
    ];
}

// ── 6. Estadísticas generales (excluir centros 1 y 6) ────────────────────────
$totalPiezas = 0;
foreach ($stockRows as $row) {
    if (!in_array((int)$row['idcd'], $centrosExcluidosTotales)) {
        $totalPiezas += (int)$row['cantidad'];
    }
}
$stockNegativos = count(array_filter($stockMap, fn($p) => $p['tiene_negativo']));

echo json_encode([
    'success'           => true,
    'centros'           => $centros,
    'resumen_centros'   => $resumenCentros,
    'stock'             => array_values($stockMap),
    'centros_con_stock' => $centrosConStock,
    'stats' => [
        'total_piezas'        => (int)$totalPiezas,
        'productos_negativos' => $stockNegativos,
        'centros_activos'     => count($centrosConStock),
    ],
], JSON_UNESCAPED_UNICODE);
