<?php
$pageTitle = 'Nueva Compra de Inventario';
require_once __DIR__ . '/../../config/config.php';
requireLogin();

$db = getDB();

// Obtener insumos activos
$stmtInsumos = $db->query("
    SELECT i.*, ic.nombre as categoria_nombre 
    FROM insumos i 
    LEFT JOIN categorias_insumos ic ON i.categoria_id = ic.id 
    WHERE i.activo = 1 
    ORDER BY ic.nombre, i.nombre
");
$insumos = $stmtInsumos->fetchAll();

// Procesar compra múltiple
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['guardar_compra'])) {
    try {
        $db->beginTransaction();
        
        $items = $_POST['items'] ?? [];
        $motivo_general = sanitize($_POST['motivo_general'] ?? 'Compra de inventario');
        $comprasRealizadas = 0;
        
        foreach ($items as $item) {
            $insumo_id = intval($item['insumo_id'] ?? 0);
            $cantidad = floatval($item['cantidad'] ?? 0);
            
            if ($insumo_id > 0 && $cantidad > 0) {
                // Obtener stock actual
                $stmtStock = $db->prepare("SELECT stock_actual FROM insumos WHERE id = ?");
                $stmtStock->execute([$insumo_id]);
                $stockActual = $stmtStock->fetchColumn();
                
                if ($stockActual === false) continue;
                
                $nuevoStock = $stockActual + $cantidad;
                
                // Actualizar stock
                $stmtUpdate = $db->prepare("UPDATE insumos SET stock_actual = ? WHERE id = ?");
                $stmtUpdate->execute([$nuevoStock, $insumo_id]);
                
                // Registrar movimiento
                $stmtMov = $db->prepare("
                    INSERT INTO movimientos_inventario 
                    (insumo_id, tipo, cantidad, stock_anterior, stock_nuevo, motivo, usuario_id)
                    VALUES (?, 'entrada', ?, ?, ?, ?, ?)
                ");
                $stmtMov->execute([
                    $insumo_id,
                    $cantidad,
                    $stockActual,
                    $nuevoStock,
                    $motivo_general,
                    $_SESSION['user_id']
                ]);
                
                $comprasRealizadas++;
            }
        }
        
        $db->commit();
        
        if ($comprasRealizadas > 0) {
            showAlert("Compra registrada correctamente. $comprasRealizadas insumo(s) actualizados.");
            header('Location: list.php');
            exit;
        } else {
            showAlert('No se registró ningún insumo. Verifique los datos.', 'warning');
        }
        
    } catch (Exception $e) {
        $db->rollBack();
        showAlert('Error al registrar compra: ' . $e->getMessage(), 'danger');
    }
}

require_once __DIR__ . '/../../includes/header.php';
?>

<div class="d-flex justify-content-between align-items-center mt-4 mb-4">
    <h2><i class="bi bi-cart-plus"></i> Nueva Compra de Inventario</h2>
    <a href="list.php" class="btn btn-outline-secondary">
        <i class="bi bi-arrow-left"></i> Volver
    </a>
</div>

<form method="POST" id="formCompra">
    <div class="row">
        <div class="col-md-8">
            <div class="card mb-4">
                <div class="card-header d-flex justify-content-between align-items-center">
                    <h5 class="mb-0"><i class="bi bi-box-seam"></i> Insumos a Comprar</h5>
                    <button type="button" class="btn btn-success btn-sm" onclick="agregarFila()">
                        <i class="bi bi-plus-lg"></i> Agregar Fila
                    </button>
                </div>
                <div class="card-body">
                    <div class="table-responsive">
                        <table class="table" id="tablaInsumos">
                            <thead>
                                <tr>
                                    <th style="width: 50%;">Insumo</th>
                                    <th style="width: 20%;">Stock Actual</th>
                                    <th style="width: 20%;">Cantidad a Agregar</th>
                                    <th style="width: 10%;"></th>
                                </tr>
                            </thead>
                            <tbody id="tbodyInsumos">
                                <tr class="fila-insumo">
                                    <td>
                                        <select name="items[0][insumo_id]" class="form-select insumo-select" onchange="actualizarStock(this)">
                                            <option value="">Seleccionar insumo...</option>
                                            <?php 
                                            $categoriaActual = '';
                                            foreach ($insumos as $insumo): 
                                                if ($insumo['categoria_nombre'] != $categoriaActual) {
                                                    if ($categoriaActual != '') echo '</optgroup>';
                                                    $categoriaActual = $insumo['categoria_nombre'] ?? 'Sin categoría';
                                                    echo '<optgroup label="' . htmlspecialchars($categoriaActual) . '">';
                                                }
                                            ?>
                                            <option value="<?= $insumo['id'] ?>" 
                                                    data-stock="<?= $insumo['stock_actual'] ?>"
                                                    data-unidad="<?= htmlspecialchars($insumo['unidad_medida']) ?>">
                                                <?= htmlspecialchars($insumo['nombre']) ?>
                                            </option>
                                            <?php endforeach; ?>
                                            <?php if ($categoriaActual != '') echo '</optgroup>'; ?>
                                        </select>
                                    </td>
                                    <td class="stock-actual text-center">
                                        <span class="badge bg-secondary">-</span>
                                    </td>
                                    <td>
                                        <input type="number" step="0.01" min="0.01" name="items[0][cantidad]" 
                                               class="form-control cantidad-input" placeholder="0.00">
                                    </td>
                                    <td class="text-center">
                                        <button type="button" class="btn btn-outline-danger btn-sm" onclick="eliminarFila(this)" title="Eliminar">
                                            <i class="bi bi-trash"></i>
                                        </button>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                    
                    <div class="text-center">
                        <button type="button" class="btn btn-outline-success" onclick="agregarFila()">
                            <i class="bi bi-plus-lg"></i> Agregar Otro Insumo
                        </button>
                    </div>
                </div>
            </div>
        </div>
        
        <div class="col-md-4">
            <div class="card mb-4">
                <div class="card-header">
                    <h5 class="mb-0"><i class="bi bi-info-circle"></i> Información de Compra</h5>
                </div>
                <div class="card-body">
                    <div class="mb-3">
                        <label class="form-label">Motivo / Descripción</label>
                        <textarea name="motivo_general" class="form-control" rows="3" 
                                  placeholder="Ej: Compra mensual, Reposición urgente..."><?= date('d/m/Y') ?> - Compra de inventario</textarea>
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label">Fecha</label>
                        <input type="text" class="form-control" value="<?= date('d/m/Y H:i') ?>" disabled>
                        <small class="text-muted">La compra se registra con la fecha actual</small>
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label">Usuario</label>
                        <input type="text" class="form-control" value="<?= $_SESSION['nombre'] ?>" disabled>
                    </div>
                    
                    <hr>
                    
                    <div class="d-grid">
                        <button type="submit" name="guardar_compra" class="btn btn-primary btn-lg">
                            <i class="bi bi-check-lg"></i> Registrar Compra
                        </button>
                    </div>
                </div>
            </div>
            
            <div class="card">
                <div class="card-header bg-info text-white">
                    <h6 class="mb-0"><i class="bi bi-lightbulb"></i> Resumen</h6>
                </div>
                <div class="card-body">
                    <p class="mb-1">Insumos a agregar: <strong id="contadorInsumos">0</strong></p>
                    <p class="mb-0 text-muted"><small>Los insumos con cantidad vacía serán ignorados</small></p>
                </div>
            </div>
        </div>
    </div>
</form>

<script>
var filaIndex = 1;

function agregarFila() {
    var tbody = document.getElementById('tbodyInsumos');
    var nuevaFila = document.querySelector('.fila-insumo').cloneNode(true);
    
    // Actualizar nombres de campos
    var select = nuevaFila.querySelector('select');
    select.name = 'items[' + filaIndex + '][insumo_id]';
    select.value = '';
    
    var input = nuevaFila.querySelector('input[type="number"]');
    input.name = 'items[' + filaIndex + '][cantidad]';
    input.value = '';
    
    // Resetear stock
    nuevaFila.querySelector('.stock-actual').innerHTML = '<span class="badge bg-secondary">-</span>';
    
    tbody.appendChild(nuevaFila);
    filaIndex++;
    actualizarContador();
}

function eliminarFila(btn) {
    var filas = document.querySelectorAll('.fila-insumo');
    if (filas.length > 1) {
        btn.closest('tr').remove();
        actualizarContador();
    } else {
        alert('Debe mantener al menos una fila');
    }
}

function actualizarStock(select) {
    var fila = select.closest('tr');
    var stockCell = fila.querySelector('.stock-actual');
    
    if (select.value) {
        var option = select.options[select.selectedIndex];
        var stock = option.dataset.stock;
        var unidad = option.dataset.unidad;
        stockCell.innerHTML = '<span class="badge bg-info">' + parseFloat(stock).toFixed(2) + ' ' + unidad + '</span>';
    } else {
        stockCell.innerHTML = '<span class="badge bg-secondary">-</span>';
    }
    actualizarContador();
}

function actualizarContador() {
    var selects = document.querySelectorAll('.insumo-select');
    var count = 0;
    selects.forEach(function(s) {
        if (s.value) count++;
    });
    document.getElementById('contadorInsumos').textContent = count;
}

// Validar antes de enviar
document.getElementById('formCompra').addEventListener('submit', function(e) {
    var inputs = document.querySelectorAll('.cantidad-input');
    var hayValidos = false;
    
    inputs.forEach(function(input) {
        var select = input.closest('tr').querySelector('.insumo-select');
        if (select.value && input.value && parseFloat(input.value) > 0) {
            hayValidos = true;
        }
    });
    
    if (!hayValidos) {
        e.preventDefault();
        alert('Debe agregar al menos un insumo con cantidad válida');
    }
});

// Actualizar contador inicial
actualizarContador();
</script>

<?php require_once __DIR__ . '/../../includes/footer.php'; ?>
