<?php
session_start();
if (!isset($_SESSION['usuario_id']) || empty($_SESSION['usuario_id']) || $_SESSION['rol'] != 'admin') {
    header('Location: ../login.php');
    exit;
}

require_once '../includes/config.php';
require_once '../includes/db.php';
require_once '../includes/theme_only.php';

$db = new Database();

// Obtener configuración
$stmt = $db->query("SELECT color_principal, color_secundario, favicon, con_decimales, moneda FROM configuracion");
$config = $stmt->fetch(PDO::FETCH_ASSOC);

// Funciones helper
function formatNumber($number) {
    global $config;
    return number_format($number, $config['con_decimales'] ? 2 : 0, ',', '.');
}

function formatMoney($number) {
    global $config;
    return formatNumber($number) . ' ' . $config['moneda'];
}

// Consultas para los filtros
$sql_filtros = [
    'secciones' => "SELECT id, nombre, codigo FROM secciones ORDER BY nombre",
    'subsecciones' => "SELECT id, nombre, codigo FROM subsecciones ORDER BY nombre",
    'proveedores' => "SELECT id, nombre, codigo FROM proveedores ORDER BY nombre",
    'marcas' => "SELECT id, nombre, codigo FROM marcas ORDER BY nombre"
];

// Obtener datos para los filtros
foreach ($sql_filtros as $key => $sql) {
    ${$key} = $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}

// Procesar filtros
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $params = http_build_query($_POST);
    header("Location: reporte-inventario.php?$params");
    exit;
}

// Usar $_GET para los filtros
$filtros = $_GET;

// Inicializar variables
$productos = [];
$total_productos = 0;
$valor_total_inventario = 0;
$productos_stock_bajo = 0;

// Si hay filtros, generar el reporte
if (!empty($filtros) || empty($_GET)) { // Si no hay filtros, mostrar todo
    $where = [];
    $params = [];
    
    // Filtros
    $filtros_simples = [
        'seccion_id' => 'p.id_seccion',
        'subseccion_id' => 'p.id_subseccion',
        'proveedor_id' => 'p.id_proveedor',
        'marca_id' => 'p.id_marca'
    ];
    
    foreach ($filtros_simples as $post_key => $campo) {
        if (!empty($filtros[$post_key])) {
            $where[] = "$campo = :$post_key";
            $params[":$post_key"] = $filtros[$post_key];
        }
    }
    
    // Filtro de estado de stock
    if (!empty($filtros['estado_stock'])) {
        switch ($filtros['estado_stock']) {
            case 'bajo':
                $where[] = "p.stock < 10"; // Ajusta este valor según tus necesidades
                break;
            case 'normal':
                $where[] = "p.stock BETWEEN 10 AND 50";
                break;
            case 'exceso':
                $where[] = "p.stock > 50";
                break;
        }
    }

    // Consulta principal
    $sql = "SELECT 
                p.*,
                s.nombre as seccion_nombre,
                s.codigo as seccion_codigo,
                ss.nombre as subseccion_nombre,
                ss.codigo as subseccion_codigo,
                pr.nombre as proveedor_nombre,
                pr.codigo as proveedor_codigo,
                m.nombre as marca_nombre,
                m.codigo as marca_codigo,
                (SELECT COUNT(*) FROM venta_items vi WHERE vi.producto_id = p.id) as total_ventas,
                (SELECT COALESCE(SUM(vi.cantidad), 0) FROM venta_items vi WHERE vi.producto_id = p.id) as cantidad_vendida
            FROM productos p
            LEFT JOIN secciones s ON p.id_seccion = s.id
            LEFT JOIN subsecciones ss ON p.id_subseccion = ss.id
            LEFT JOIN proveedores pr ON p.id_proveedor = pr.id
            LEFT JOIN marcas m ON p.id_marca = m.id
            " . (!empty($where) ? " WHERE " . implode(" AND ", $where) : "");
            
    $stmt = $db->prepare($sql);
    $stmt->execute($params);
    $productos = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // Calcular totales
    foreach ($productos as $producto) {
        $total_productos++;
        $valor_total_inventario += $producto['stock'] * $producto['precio_compra'];
        if ($producto['stock'] < 10) { // Ajusta este valor según tus necesidades
            $productos_stock_bajo++;
        }
    }
}
echo getThemeCSS();

?>
<!DOCTYPE html>
<html lang="es">
<head>
<?php

    // Modo oscuro
    require_once '../includes/dark_mode.php';
    ?>
    <meta name="color-scheme" content="light dark">
    <?php echo getDarkModeStyles(); ?>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Reporte de Inventario</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
    <link href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" rel="stylesheet" />
    <?php if (!empty($config['favicon'])): ?>
        <link rel="shortcut icon" href="../uploads/config/<?php echo $config['favicon']; ?>" type="image/x-icon">
    <?php endif; ?>
    <style>
        .btn-primary {
            background-color: <?php echo $config['color_principal']; ?> !important;
            border-color: <?php echo $config['color_principal']; ?> !important;
        }
        .btn-secondary {
            background-color: <?php echo $config['color_secundario']; ?> !important;
            border-color: <?php echo $config['color_secundario']; ?> !important;
        }
        .titulo-principal {
            color: <?php echo $config['color_principal']; ?>;
        }
        
        .stock-bajo { color: #dc3545; }
        .stock-normal { color: #198754; }
        .stock-exceso { color: #ffc107; }

        /* Nuevo estilo para el foco de los controles */
        .form-control:focus,
        .form-select:focus,
        .select2-container--bootstrap-5 .select2-selection:focus,
        .select2-container--bootstrap-5.select2-container--focus .select2-selection {
            border-color: <?php echo $config['color_principal']; ?> !important;
            box-shadow: 0 0 0 0.25rem <?php echo $config['color_principal']; ?>40 !important; /* 40 = 25% opacidad en hexadecimal */
        }

        /* Ajustar color de foco para Select2 */
        .select2-container--bootstrap-5.select2-container--open .select2-selection {
            border-color: <?php echo $config['color_principal']; ?> !important;
        }

        .select2-container--bootstrap-5 .select2-dropdown .select2-results__option--highlighted{
            background-color: <?php echo $config['color_principal']; ?> !important;
        }

        /* Estilos para impresión */
        @media print {
            @page {
                size: landscape;
            }
            
            body {
                padding: 0;
                margin: 1cm;
            }

            .container {
                max-width: 100% !important;
                width: 100% !important;
            }

            .form-actions, 
            .dataTables_filter,
            .dataTables_length,
            .dataTables_paginate {
                display: none !important;
            }

            .table {
                font-size: 12px;
            }

            .row.mt-4 {
                page-break-before: always;
            }
        }

        /* Ajustar ancho del contenedor */
        .container {
            max-width: 98% !important;
            margin: 0 auto;
            padding: 0 10px;
        }

        /* Ajustar espaciado de la tabla */
        .table {
            margin: 0;
            white-space: normal;
        }
        
        .table td, .table th {
            padding: 0.5rem;
            vertical-align: top;
        }

        /* Ajustar anchos de columnas específicas */
        .col-numero {
            width: 60px !important;
            text-align: right;
            padding-right: 10px !important;
        }
        .col-precio {
            width: 100px !important;
            text-align: right;
            padding-right: 10px !important;
        }
        .col-codigo {
            width: 80px !important;
        }
        .col-producto {
            width: 200px !important;
        }
        .col-seccion, .col-subseccion, .col-proveedor, .col-marca {
            width: 150px !important;
            word-break: break-word;
        }
    </style>

</head>
<body>
    <div class="container mt-4">
        <div class="d-flex align-items-center mb-3">
            <a href="dashboard.php" class="text-decoration-none" style="margin-right: 2rem">
                <img src="icons/menu.svg" alt="Menú" width="36" height="36">
            </a>
            <h2 class="titulo-principal h3 mb-0">Reporte de Inventario</h2>
        </div>

        <!-- Formulario de filtros -->
        <div class="card mb-4">
            <div class="card-body">
                <form method="POST" id="reportForm" action="reporte-inventario.php">
                    <div class="row g-3">
                        <!-- Filtros de clasificación -->
                        <div class="col-md-3">
                            <label>Sección:</label>
                            <select name="seccion_id" class="form-control">
                                <option value="">Todas</option>
                                <?php foreach ($secciones as $seccion): ?>
                                    <option value="<?= $seccion['id'] ?>" <?= (isset($filtros['seccion_id']) && $filtros['seccion_id'] == $seccion['id']) ? 'selected' : '' ?>>
                                        <?= htmlspecialchars($seccion['codigo'] . ' - ' . $seccion['nombre']) ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>

                        <div class="col-md-3">
                            <label>Subsección:</label>
                            <select name="subseccion_id" class="form-control">
                                <option value="">Todas</option>
                                <?php foreach ($subsecciones as $subseccion): ?>
                                    <option value="<?= $subseccion['id'] ?>" <?= (isset($filtros['subseccion_id']) && $filtros['subseccion_id'] == $subseccion['id']) ? 'selected' : '' ?>>
                                        <?= htmlspecialchars($subseccion['codigo'] . ' - ' . $subseccion['nombre']) ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>

                        <div class="col-md-3">
                            <label>Proveedor:</label>
                            <select name="proveedor_id" class="form-control">
                                <option value="">Todos</option>
                                <?php foreach ($proveedores as $proveedor): ?>
                                    <option value="<?= $proveedor['id'] ?>" <?= (isset($filtros['proveedor_id']) && $filtros['proveedor_id'] == $proveedor['id']) ? 'selected' : '' ?>>
                                        <?= htmlspecialchars($proveedor['codigo'] . ' - ' . $proveedor['nombre']) ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>

                        <div class="col-md-3">
                            <label>Estado del Stock:</label>
                            <select name="estado_stock" class="form-control">
                                <option value="">Todos</option>
                                <option value="bajo" <?= (isset($filtros['estado_stock']) && $filtros['estado_stock'] == 'bajo') ? 'selected' : '' ?>>Stock Bajo</option>
                                <option value="normal" <?= (isset($filtros['estado_stock']) && $filtros['estado_stock'] == 'normal') ? 'selected' : '' ?>>Stock Normal</option>
                                <option value="exceso" <?= (isset($filtros['estado_stock']) && $filtros['estado_stock'] == 'exceso') ? 'selected' : '' ?>>Stock en Exceso</option>
                            </select>
                        </div>
                    </div>

                    <div class="form-actions mt-3">
                        <button type="submit" class="btn btn-primary">Generar Reporte</button>
                        <?php if (!empty($productos)): ?>
                            <button type="button" class="btn btn-secondary" onclick="window.print()">Imprimir</button>
                        <?php endif; ?>
                    </div>
                </form>
            </div>
        </div>

        <?php if (!empty($productos)): ?>
            <!-- Resumen de totales -->
            <div class="card mb-4">
                <div class="card-body">
                    <div class="row">
                        <div class="col-md-4">
                            <h5>Total Productos: <?= $total_productos ?></h5>
                        </div>
                        <div class="col-md-4">
                            <h5>Valor Total Inventario: <?= formatMoney($valor_total_inventario) ?></h5>
                        </div>
                        <div class="col-md-4">
                            <h5>Productos Stock Bajo: <?= $productos_stock_bajo ?></h5>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Tabla de resultados -->
            <div class="table-responsive">
                <table id="inventarioTable" class="table table-striped">
                    <thead>
                        <tr>
                            <th class="col-codigo">Código</th>
                            <th class="col-producto">Producto</th>
                            <th class="col-numero">Stock</th>
                            <th class="col-precio">P. Com</th>
                            <th class="col-precio">Valor Total</th>
                            <th class="col-seccion">Sección</th>
                            <th class="col-subseccion">Subsección</th>
                            <th class="col-proveedor">Proveedor</th>
                            <th class="col-marca">Marca</th>
                            <th class="col-numero">Ve</th>
                            <th class="col-numero">Rot.</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($productos as $producto): 
                            $valor_total = $producto['stock'] * $producto['precio_compra'];
                            $stock_class = '';
                            if ($producto['stock'] < 10) {
                                $stock_class = 'stock-bajo';
                            } elseif ($producto['stock'] > 50) {
                                $stock_class = 'stock-exceso';
                            } else {
                                $stock_class = 'stock-normal';
                            }
                        ?>
                        <tr>
                            <td><?= htmlspecialchars($producto['codigo']) ?></td>
                            <td><?= htmlspecialchars($producto['titulo']) ?></td>
                            <td class="<?= $stock_class ?>"><?= $producto['stock'] ?></td>
                            <td><?= formatMoney($producto['precio_compra']) ?></td>
                            <td><?= formatMoney($valor_total) ?></td>
                            <td><?= htmlspecialchars($producto['seccion_codigo'] . ' - ' . $producto['seccion_nombre']) ?></td>
                            <td><?= htmlspecialchars($producto['subseccion_codigo'] . ' - ' . $producto['subseccion_nombre']) ?></td>
                            <td><?= htmlspecialchars($producto['proveedor_codigo'] . ' - ' . $producto['proveedor_nombre']) ?></td>
                            <td><?= htmlspecialchars($producto['marca_codigo'] . ' - ' . $producto['marca_nombre']) ?></td>
                            <td><?= $producto['total_ventas'] ?></td>
                            <td><?= $producto['cantidad_vendida'] ?></td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>

            <!-- Gráficos -->
            <div class="row mt-4">
                <div class="col-md-6 mb-4">
                    <div class="card">
                        <div class="card-body">
                            <h5 class="card-title">Distribución del Stock</h5>
                            <canvas id="stockDistribution"></canvas>
                        </div>
                    </div>
                </div>
                
                <div class="col-md-6 mb-4">
                    <div class="card">
                        <div class="card-body">
                            <h5 class="card-title">Top 10 Productos por Valor</h5>
                            <canvas id="topProductos"></canvas>
                        </div>
                    </div>
                </div>
            </div>
        <?php endif; ?>
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
    <script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/1.11.5/js/dataTables.bootstrap5.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    
    <script>
        $(document).ready(function() {
            // Inicializar DataTables
            $('#inventarioTable').DataTable({
                language: {
                    url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Spanish.json',
                    lengthMenu: "Mostrar _MENU_ registros por página",
                    zeroRecords: "No se encontraron resultados",
                    info: "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
                    infoEmpty: "Mostrando registros del 0 al 0 de un total de 0 registros",
                    infoFiltered: "(filtrado de un total de _MAX_ registros)",
                    search: "Buscar:",
                    paginate: {
                        first: "Primero",
                        last: "Último",
                        next: "Siguiente",
                        previous: "Anterior"
                    }
                },
                pageLength: 25,
                order: [[2, 'asc']] // Ordenar por stock ascendente
            });

            <?php if (!empty($productos)): ?>
                // Datos para los gráficos
                const stockData = {
                    bajo: <?= array_reduce($productos, function($carry, $item) { return $carry + ($item['stock'] < 10 ? 1 : 0); }, 0) ?>,
                    normal: <?= array_reduce($productos, function($carry, $item) { return $carry + ($item['stock'] >= 10 && $item['stock'] <= 50 ? 1 : 0); }, 0) ?>,
                    exceso: <?= array_reduce($productos, function($carry, $item) { return $carry + ($item['stock'] > 50 ? 1 : 0); }, 0) ?>
                };

                // Gráfico de distribución de stock
                new Chart(document.getElementById('stockDistribution'), {
                    type: 'pie',
                    data: {
                        labels: ['Stock Bajo', 'Stock Normal', 'Stock en Exceso'],
                        datasets: [{
                            data: [stockData.bajo, stockData.normal, stockData.exceso],
                            backgroundColor: ['#dc3545', '#198754', '#ffc107']
                        }]
                    },
                    options: {
                        aspectRatio: 2,
                        maintainAspectRatio: true,
                        plugins: {
                            legend: {
                                position: 'bottom'
                            }
                        }
                    }
                });

                // Preparar datos para el top 10 por valor
                const productosOrdenados = <?= json_encode(array_map(function($p) {
                    return [
                        'nombre' => $p['codigo'] . ' - ' . mb_substr($p['titulo'], 0, 20),
                        'valor' => $p['stock'] * $p['precio_compra']
                    ];
                }, $productos)); ?>;

                productosOrdenados.sort((a, b) => b.valor - a.valor);
                const top10 = productosOrdenados.slice(0, 10);

                // Gráfico de top 10 productos por valor
                new Chart(document.getElementById('topProductos'), {
                    type: 'bar',
                    data: {
                        labels: top10.map(p => p.nombre),
                        datasets: [{
                            label: 'Valor en Inventario',
                            data: top10.map(p => p.valor),
                            backgroundColor: '<?= $config['color_principal'] ?>'
                        }]
                    },
                    options: {
                        aspectRatio: 2,
                        maintainAspectRatio: true,
                        scales: {
                            y: {
                                beginAtZero: true
                            }
                        },
                        plugins: {
                            legend: {
                                position: 'bottom'
                            }
                        }
                    }
                });
            <?php endif; ?>
        });
    </script>
</body>

</html>
