<?php
// Mostrar errores para depuración
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Ruta absoluta
$ruta_base = $_SERVER['DOCUMENT_ROOT'] . '/iestp2026/jcastro/semana15/';

if(file_exists($ruta_base . 'conexion.php')) {
    include($ruta_base . 'conexion.php');
} else {
    include('../conexion.php');
}

if(!isset($conexion) || !$conexion) {
    die('<div class="alert alert-danger">Error de conexión a la base de datos</div>');
}

// Iniciar sesión si no está iniciada
if(session_status() == PHP_SESSION_NONE) {
    session_start();
}

// Obtener el ID del usuario de la sesión
$id_usuario = isset($_SESSION['id']) ? intval($_SESSION['id']) : 0;

if($id_usuario <= 0) {
    header('Location: /iestp2026/jcastro/semana15/menu.php?page=venta_listar&error=Usuario no autenticado');
    exit();
}

// Obtener clientes
$clientes_sql = "SELECT id_clientes, nombre_razon, dni_ruc FROM clientes ORDER BY nombre_razon";
$clientes_result = mysqli_query($conexion, $clientes_sql);

// Obtener productos con stock disponible
$productos_sql = "SELECT id_producto, descripcion, precio, stock FROM producto WHERE stock > 0 ORDER BY descripcion";
$productos_result = mysqli_query($conexion, $productos_sql);

$mensaje = '';
$tipo_mensaje = '';

// Procesar formulario
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['guardar'])) {
    $id_cliente = intval($_POST['id_cliente']);
    $tipo_comprobante = mysqli_real_escape_string($conexion, $_POST['tipo_comprobante']);
    $fecha = date('Y-m-d');
    $total = 0;
    
    $productos_ids = isset($_POST['producto_id']) ? $_POST['producto_id'] : [];
    $cantidades = isset($_POST['cantidad']) ? $_POST['cantidad'] : [];
    $precios = isset($_POST['precio']) ? $_POST['precio'] : [];
    
    if(empty($id_cliente) || empty($productos_ids)) {
        $mensaje = 'Debe seleccionar un cliente y al menos un producto';
        $tipo_mensaje = 'danger';
    } else {
        mysqli_begin_transaction($conexion);
        
        try {
            // Calcular total
            for($i = 0; $i < count($productos_ids); $i++) {
                $cantidad = intval($cantidades[$i]);
                $precio = floatval($precios[$i]);
                $total += $cantidad * $precio;
            }
            
            // 1. INSERTAR EN TABLA venta
            $venta_sql = "INSERT INTO venta (fecha, id_cliente, id_usuario, tipo_comprobante, total) 
                          VALUES ('$fecha', $id_cliente, $id_usuario, '$tipo_comprobante', $total)";
            
            if(!mysqli_query($conexion, $venta_sql)) {
                throw new Exception('Error al registrar la venta: ' . mysqli_error($conexion));
            }
            
            $id_venta = mysqli_insert_id($conexion);
            
            // 2. INSERTAR EN TABLA detalle_venta y ACTUALIZAR stock
            for($i = 0; $i < count($productos_ids); $i++) {
                $id_producto = intval($productos_ids[$i]);
                $cantidad = intval($cantidades[$i]);
                $precio_unitario = floatval($precios[$i]);
                $subtotal = $cantidad * $precio_unitario;
                
                $detalle_sql = "INSERT INTO detalle_venta (id_venta, id_producto, cantidad, precio_unitario, subtotal) 
                                VALUES ($id_venta, $id_producto, $cantidad, $precio_unitario, $subtotal)";
                
                if(!mysqli_query($conexion, $detalle_sql)) {
                    throw new Exception('Error al registrar detalle: ' . mysqli_error($conexion));
                }
                
                $stock_sql = "UPDATE producto SET stock = stock - $cantidad WHERE id_producto = $id_producto";
                if(!mysqli_query($conexion, $stock_sql)) {
                    throw new Exception('Error al actualizar stock: ' . mysqli_error($conexion));
                }
            }
            
            mysqli_commit($conexion);
            header('Location: /iestp2026/jcastro/semana15/menu.php?page=venta_listar&mensaje=creado');
            exit();
            
        } catch (Exception $e) {
            mysqli_rollback($conexion);
            $mensaje = $e->getMessage();
            $tipo_mensaje = 'danger';
        }
    }
}
?>

<!-- El resto del HTML de nuevo.php se mantiene igual -->
<div class="d-flex justify-content-between align-items-center mb-4">
    <h2>
        <i class="fas fa-plus-circle me-2 text-primary"></i>
        Nueva Venta
    </h2>
    <div>
        <a href="menu.php?page=venta_listar" class="btn btn-secondary">
            <i class="fas fa-arrow-left me-1"></i>
            Volver
        </a>
    </div>
</div>

<div class="table-container">
    <?php if($mensaje): ?>
        <div class="alert alert-<?php echo $tipo_mensaje; ?> alert-dismissible fade show">
            <i class="fas fa-<?php echo ($tipo_mensaje == 'success') ? 'check-circle' : 'exclamation-circle'; ?> me-2"></i>
            <?php echo $mensaje; ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
        </div>
    <?php endif; ?>
    
    <form method="POST" action="" id="formVenta">
        <div class="row g-3">
            <div class="col-md-6">
                <label for="id_cliente" class="form-label">
                    <i class="fas fa-user me-1 text-primary"></i>
                    Cliente <span class="text-danger">*</span>
                </label>
                <select class="form-select" id="id_cliente" name="id_cliente" required>
                    <option value="">Seleccionar cliente...</option>
                    <?php while($cli = mysqli_fetch_assoc($clientes_result)): ?>
                        <option value="<?php echo $cli['id_clientes']; ?>">
                            <?php echo htmlspecialchars($cli['nombre_razon']); ?> (<?php echo $cli['dni_ruc']; ?>)
                        </option>
                    <?php endwhile; ?>
                </select>
            </div>
            
            <div class="col-md-6">
                <label for="tipo_comprobante" class="form-label">
                    <i class="fas fa-file-invoice me-1 text-primary"></i>
                    Tipo de Comprobante <span class="text-danger">*</span>
                </label>
                <select class="form-select" id="tipo_comprobante" name="tipo_comprobante" required>
                    <option value="boleta">Boleta</option>
                    <option value="factura">Factura</option>
                </select>
            </div>
        </div>
        
        <hr class="my-4">
        
        <h5 class="mb-3">
            <i class="fas fa-box me-2 text-primary"></i>
            Detalle de Productos
            <button type="button" class="btn btn-sm btn-success ms-2" id="agregarProducto">
                <i class="fas fa-plus me-1"></i>
                Agregar Producto
            </button>
        </h5>
        
        <div class="table-responsive">
            <table class="table table-bordered" id="tablaProductos">
                <thead>
                    <tr>
                        <th>Producto</th>
                        <th>Precio Unitario (S/)</th>
                        <th>Cantidad</th>
                        <th>Subtotal (S/)</th>
                        <th>Acción</th>
                    </tr>
                </thead>
                <tbody id="detalleVenta">
                    <tr id="filaVacia">
                        <td colspan="5" class="text-center text-muted">
                            <i class="fas fa-info-circle me-1"></i>
                            Haga clic en "Agregar Producto" para añadir productos
                        </td>
                    </tr>
                </tbody>
                <tfoot>
                    <tr>
                        <th colspan="3" class="text-end">TOTAL VENTA:</th>
                        <th id="totalVenta">S/ 0.00</th>
                        <th></th>
                    </tr>
                </tfoot>
            </table>
        </div>
        
        <div class="mt-4">
            <button type="submit" name="guardar" class="btn btn-primary">
                <i class="fas fa-save me-1"></i>
                Registrar Venta
            </button>
            <a href="menu.php?page=venta_listar" class="btn btn-secondary">
                <i class="fas fa-times me-1"></i>
                Cancelar
            </a>
        </div>
    </form>
</div>

<!-- Modal para seleccionar producto -->
<div class="modal fade" id="modalProducto" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">
                    <i class="fas fa-box me-2 text-primary"></i>
                    Seleccionar Producto
                </h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <div class="mb-3">
                    <label class="form-label">Producto</label>
                    <select class="form-select" id="selectProducto">
                        <option value="">Seleccionar producto...</option>
                        <?php while($prod = mysqli_fetch_assoc($productos_result)): ?>
                            <option value="<?php echo $prod['id_producto']; ?>" 
                                    data-precio="<?php echo $prod['precio']; ?>"
                                    data-stock="<?php echo $prod['stock']; ?>"
                                    data-nombre="<?php echo htmlspecialchars($prod['descripcion']); ?>">
                                <?php echo htmlspecialchars($prod['descripcion']); ?> - S/ <?php echo number_format($prod['precio'], 2); ?> (Stock: <?php echo $prod['stock']; ?>)
                            </option>
                        <?php endwhile; ?>
                    </select>
                </div>
                <div class="mb-3">
                    <label for="cantidadProducto" class="form-label">Cantidad:</label>
                    <input type="number" class="form-control" id="cantidadProducto" value="1" min="1">
                </div>
                <div>
                    <label class="form-label">Stock disponible: <span id="stockDisponible" class="badge bg-info">0</span></label>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
                <button type="button" class="btn btn-primary" id="btnAgregarProducto">
                    <i class="fas fa-plus me-1"></i>
                    Agregar
                </button>
            </div>
        </div>
    </div>
</div>

<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

<script>
$(document).ready(function(){
    var contador = 0;
    var productosAgregados = [];
    
    $('#selectProducto').change(function(){
        var stock = $(this).find(':selected').data('stock') || 0;
        $('#stockDisponible').text(stock);
        $('#cantidadProducto').attr('max', stock);
        if(stock > 0) $('#cantidadProducto').val(1);
    });
    
    $('#agregarProducto').click(function(){
        $('#selectProducto').val('');
        $('#cantidadProducto').val(1);
        $('#stockDisponible').text(0);
        $('#modalProducto').modal('show');
    });
    
    $('#btnAgregarProducto').click(function(){
        var productoId = $('#selectProducto').val();
        var productoNombre = $('#selectProducto').find(':selected').data('nombre');
        var precio = parseFloat($('#selectProducto').find(':selected').data('precio')) || 0;
        var stock = parseInt($('#selectProducto').find(':selected').data('stock')) || 0;
        var cantidad = parseInt($('#cantidadProducto').val()) || 1;
        
        if(!productoId) {
            alert('Por favor, seleccione un producto');
            return;
        }
        
        if(cantidad < 1 || cantidad > stock) {
            alert('Cantidad no válida. Stock disponible: ' + stock);
            return;
        }
        
        if(productosAgregados.includes(productoId)) {
            alert('Este producto ya está en la lista');
            return;
        }
        
        contador++;
        productosAgregados.push(productoId);
        var subtotal = precio * cantidad;
        
        var fila = `
            <tr id="fila_${contador}">
                <td>
                    ${productoNombre}
                    <input type="hidden" name="producto_id[]" value="${productoId}">
                    <input type="hidden" name="precio[]" value="${precio}">
                </td>
                <td>S/ ${precio.toFixed(2)}</td>
                <td>
                    <input type="number" class="form-control form-control-sm cantidad" 
                           name="cantidad[]" value="${cantidad}" min="1" max="${stock}"
                           data-fila="${contador}" data-precio="${precio}">
                </td>
                <td class="subtotal">S/ ${subtotal.toFixed(2)}</td>
                <td>
                    <button type="button" class="btn btn-danger btn-sm eliminar-producto" data-fila="${contador}">
                        <i class="fas fa-times"></i>
                    </button>
                </td>
            </tr>
        `;
        
        $('#filaVacia').remove();
        $('#detalleVenta').append(fila);
        calcularTotal();
        $('#modalProducto').modal('hide');
    });
    
    $(document).on('click', '.eliminar-producto', function(){
        var filaId = $(this).data('fila');
        var fila = $('#fila_' + filaId);
        var productoId = fila.find('input[name="producto_id[]"]').val();
        
        var index = productosAgregados.indexOf(productoId);
        if(index > -1) productosAgregados.splice(index, 1);
        
        fila.remove();
        
        if($('#detalleVenta tr').length === 0) {
            $('#detalleVenta').append(`
                <tr id="filaVacia">
                    <td colspan="5" class="text-center text-muted">
                        <i class="fas fa-info-circle me-1"></i>
                        Haga clic en "Agregar Producto" para añadir productos
                    </td>
                </tr>
            `);
        }
        
        calcularTotal();
    });
    
    $(document).on('change', '.cantidad', function(){
        var filaId = $(this).data('fila');
        var precio = $(this).data('precio');
        var cantidad = parseInt($(this).val()) || 0;
        var stock = parseInt($(this).attr('max')) || 0;
        
        if(cantidad < 1) { $(this).val(1); cantidad = 1; }
        if(cantidad > stock) {
            alert('Stock disponible: ' + stock);
            $(this).val(stock);
            cantidad = stock;
        }
        
        var subtotal = precio * cantidad;
        $('#fila_' + filaId).find('.subtotal').text('S/ ' + subtotal.toFixed(2));
        calcularTotal();
    });
    
    function calcularTotal() {
        var total = 0;
        $('.subtotal').each(function(){
            var texto = $(this).text().replace('S/ ', '').trim();
            var valor = parseFloat(texto) || 0;
            total += valor;
        });
        $('#totalVenta').text('S/ ' + total.toFixed(2));
    }
});
</script>