<?php
session_start();
if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}
require_once 'layout_header.php';
require_once 'db/config.php';

try {
    $pdo = db();

    // 1. Datos para las tarjetas de resumen
    $total_productos = $pdo->query("SELECT COUNT(*) FROM products")->fetchColumn();
    $total_sedes = $pdo->query("SELECT COUNT(*) FROM sedes")->fetchColumn();
    $total_stock = $pdo->query("SELECT SUM(quantity) FROM stock_sedes")->fetchColumn();

    // 2. Datos para la tabla de inventario
    $sedes_stmt = $pdo->query("SELECT id, nombre FROM sedes ORDER BY nombre");
    $sedes = $sedes_stmt->fetchAll(PDO::FETCH_ASSOC);

    $products_stmt = $pdo->query("SELECT id, nombre FROM products ORDER BY nombre");
    $products = $products_stmt->fetchAll(PDO::FETCH_ASSOC);

    $stock_stmt = $pdo->query("SELECT product_id, sede_id, quantity FROM stock_sedes");
    $stock_data = $stock_stmt->fetchAll(PDO::FETCH_ASSOC);

    // Procesar datos para la tabla
    $inventario = [];
    foreach ($products as $product) {
        $inventario[$product['id']] = [
            'nombre' => $product['nombre'],
            'total' => 0,
            'sedes' => array_fill_keys(array_column($sedes, 'id'), 0)
        ];
    }

    foreach ($stock_data as $stock_item) {
        if (isset($inventario[$stock_item['product_id']])) {
            $inventario[$stock_item['product_id']]['sedes'][$stock_item['sede_id']] = $stock_item['quantity'];
            $inventario[$stock_item['product_id']]['total'] += $stock_item['quantity'];
        }
    }

    // 3. Datos para el gráfico circular (Distribución por Sede)
    $stock_por_sede_stmt = $pdo->query("
        SELECT s.nombre, SUM(ss.quantity) as total_stock
        FROM sedes s
        JOIN stock_sedes ss ON s.id = ss.sede_id
        GROUP BY s.nombre
        HAVING total_stock > 0
        ORDER BY s.nombre
    ");
    $stock_por_sede = $stock_por_sede_stmt->fetchAll(PDO::FETCH_ASSOC);
    $sede_chart_labels = json_encode(array_column($stock_por_sede, 'nombre'));
    $sede_chart_data = json_encode(array_column($stock_por_sede, 'total_stock'));

    // 4. Datos para el gráfico de barras (Stock por Producto)
    $stock_por_producto_stmt = $pdo->query("
        SELECT p.nombre, SUM(ss.quantity) as total_stock
        FROM products p
        JOIN stock_sedes ss ON p.id = ss.product_id
        GROUP BY p.nombre
        HAVING total_stock > 0
        ORDER BY total_stock DESC
        LIMIT 15
    ");
    $stock_por_producto = $stock_por_producto_stmt->fetchAll(PDO::FETCH_ASSOC);
    $producto_chart_labels = json_encode(array_column($stock_por_producto, 'nombre'));
    $producto_chart_data = json_encode(array_column($stock_por_producto, 'total_stock'));


} catch (PDOException $e) {
    echo "<div class='alert alert-danger'>Error al conectar o consultar la base de datos: " . $e->getMessage() . "</div>";
    require_once 'layout_footer.php';
    die();
}
?>

<div class="container-fluid mt-4">
    <h1 class="mb-4">Dashboard de Inventario</h1>

    <!-- Tarjetas de Resumen -->
    <div class="row mb-4">
        <div class="col-md-4">
            <div class="card text-white bg-primary mb-3">
                <div class="card-body">
                    <h5 class="card-title">Total de Productos</h5>
                    <p class="card-text fs-4"><?php echo $total_productos; ?></p>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card text-white bg-success mb-3">
                <div class="card-body">
                    <h5 class="card-title">Sedes Activas</h5>
                    <p class="card-text fs-4"><?php echo $total_sedes; ?></p>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card text-white bg-info mb-3">
                <div class="card-body">
                    <h5 class="card-title">Unidades Totales en Stock</h5>
                    <p class="card-text fs-4"><?php echo $total_stock ?: 0; ?></p>
                </div>
            </div>
        </div>
    </div>

    <!-- Sección de Gráficos -->
    <div class="row mb-4">
        <div class="col-lg-6 mb-4">
            <div class="card h-100">
                <div class="card-header">
                    <h5 class="m-0">Distribución por Sede</h5>
                </div>
                <div class="card-body d-flex justify-content-center align-items-center">
                    <canvas id="distribucionSedeChart" style="max-height: 300px;"></canvas>
                </div>
            </div>
        </div>
        <div class="col-lg-6 mb-4">
            <div class="card h-100">
                <div class="card-header">
                    <h5 class="m-0">Top 15 Productos con Más Stock</h5>
                </div>
                <div class="card-body">
                    <canvas id="stockProductoChart"></canvas>
                </div>
            </div>
        </div>
    </div>


    <!-- Tabla de Inventario Detallado -->
    <div class="card">
        <div class="card-header">
            <h5 class="m-0">Inventario por Sede</h5>
        </div>
        <div class="card-body">
            <div class="table-responsive">
                <table class="table table-bordered table-hover">
                    <thead class="thead-light">
                        <tr>
                            <th>Producto</th>
                            <th class="text-center">Stock Total</th>
                            <?php foreach ($sedes as $sede): ?>
                                <th class="text-center"><?php echo htmlspecialchars($sede['nombre']); ?></th>
                            <?php endforeach; ?>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if (empty($inventario)): ?>
                            <tr>
                                <td colspan="<?php echo count($sedes) + 2; ?>" class="text-center">No hay productos para mostrar.</td>
                            </tr>
                        <?php else: ?>
                            <?php foreach ($inventario as $datos_producto): ?>
                                <tr>
                                    <td><?php echo htmlspecialchars($datos_producto['nombre']); ?></td>
                                    <td class="text-center fw-bold"><?php echo $datos_producto['total']; ?></td>
                                    <?php foreach ($datos_producto['sedes'] as $cantidad): ?>
                                        <td class="text-center"><?php echo $cantidad; ?></td>
                                    <?php endforeach; ?>
                                </tr>
                            <?php endforeach; ?>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

<!-- Incluir Chart.js -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<script>
document.addEventListener('DOMContentLoaded', function () {
    // --- Gráfico 1: Distribución por Sede (Circular) ---
    const sedeLabels = <?php echo $sede_chart_labels; ?>;
    const sedeData = <?php echo $sede_chart_data; ?>;

    if (sedeLabels.length > 0) {
        const defaultColors = ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0', '#9966FF', '#FF9F40'];
        const alidrvColor = '#28a745'; // Verde

        const backgroundColors = sedeLabels.map((label, index) => {
            if (label.toLowerCase() === 'alidrv') {
                return alidrvColor;
            }
            return defaultColors[index % defaultColors.length];
        });

        const ctxSede = document.getElementById('distribucionSedeChart').getContext('2d');
        new Chart(ctxSede, {
            type: 'pie',
            data: {
                labels: sedeLabels,
                datasets: [{
                    label: 'Stock',
                    data: sedeData,
                    backgroundColor: backgroundColors,
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        position: 'bottom',
                    }
                }
            }
        });
    }

    // --- Gráfico 2: Stock por Producto (Barras) ---
    const productoLabels = <?php echo $producto_chart_labels; ?>;
    const productoData = <?php echo $producto_chart_data; ?>;

    if (productoLabels.length > 0) {
        const ctxProducto = document.getElementById('stockProductoChart').getContext('2d');
        new Chart(ctxProducto, {
            type: 'bar',
            data: {
                labels: productoLabels,
                datasets: [{
                    label: 'Cantidad en Stock',
                    data: productoData,
                    backgroundColor: 'rgba(54, 162, 235, 0.6)',
                    borderColor: 'rgba(54, 162, 235, 1)',
                    borderWidth: 1
                }]
            },
            options: {
                indexAxis: 'y', // Hace que el gráfico sea horizontal
                responsive: true,
                plugins: {
                    legend: {
                        display: false
                    },
                    title: {
                        display: true,
                        text: 'Stock por Producto'
                    }
                },
                scales: {
                    x: {
                        beginAtZero: true
                    }
                }
            }
        });
    }
});
</script>

<?php require_once 'layout_footer.php'; ?>