<?php
session_start();

// 1. CONEXIÓN Y CONFIGURACIÓN
require_once("conecta.php"); 

// PHPRunner guarda el nombre de usuario en una clave específica
// El nombre exacto depende de la versión, pero suele ser:
$usuario = $_SESSION["UserID"]; 

// SE OBTIENE EL ID DEL USUARIO EN SESSION
$sql = "select * 
        from usuario
        where nick = '$usuario'";
//$result = mysql_query($sql, $conecta) or die("No fue posible conectar a la BD!");
// 1. Cambiamos a mysqli_query y el orden: primero la conexión, luego el SQL
$result = mysqli_query($conecta, $sql) or die("Error en la consulta: " . mysqli_error($conecta));
// 2. Cambiamos a mysqli_fetch_array
$linea = mysqli_fetch_array($result);
// 3. Obtenemos el ID
$idusuario = $linea['idusuario'];


//********************************************
//***SE OBTIENE EL MOVIMIENTO DE CAJA*********
//********************************************
$sql_movimiento = "select * 
        from movimiento_caja
        where idusuario = $idusuario and estado='ABIERTO'" ;
$result_movimiento = mysqli_query($conecta, $sql_movimiento) or die("Error en la consulta: " . mysqli_error($conecta));
$linea_movimiento = mysqli_fetch_array($result_movimiento);
$idmovimiento = $linea_movimiento['idmovimiento'];



if (!function_exists('CustomQuery')) {
    function CustomQuery($sql) {
        foreach ($GLOBALS as $key => $value) {
            if ($value instanceof mysqli) { return mysqli_query($value, $sql); }
        }
        return null; 
    }
}
if (!function_exists('db_fetch_array')) {
    function db_fetch_array($result) {
        return ($result) ? mysqli_fetch_array($result, MYSQLI_ASSOC) : null;
    }
}

function h($s){ return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); }

// 2. CARGA DE DATOS
$optionsCuentas = "";
$rsCu = CustomQuery("SELECT idcuenta, denominacion FROM cuenta ORDER BY denominacion ASC");
while ($rsCu && $dCu = db_fetch_array($rsCu)) {
    $optionsCuentas.= '<option value="'.$dCu["idcuenta"].'">'.h($dCu["denominacion"]).'</option>';
}

$optionsTipos = "";
$rsT = CustomQuery("SELECT idtipo_cuenta, nombre FROM tipo_cuenta ORDER BY nombre ASC");
while ($rsT && $dT = db_fetch_array($rsT)) {
    $optionsTipos.= '<option value="'.$dT["idtipo_cuenta"].'">'.h($dT["nombre"]).'</option>';
}

$optionsCiudades = "";
$rsCi = CustomQuery("SELECT idciudad, nombre FROM ciudad ORDER BY nombre ASC");
while ($rsCi && $dCi = db_fetch_array($rsCi)) {
    $optionsCiudades.= '<option value="'.$dCi["idciudad"].'">'.h($dCi["nombre"]).'</option>';
}

$listadoClientes = "";
$rsC = CustomQuery("SELECT idcliente, denominacion, ruc_ci FROM cliente ORDER BY denominacion ASC");
while ($rsC && $dC = db_fetch_array($rsC)) {
    $listadoClientes.= '<option data-id="'.$dC["idcliente"].'" value="'.h($dC["ruc_ci"]).' - '.h($dC["denominacion"]).'">';
}

$listadoArticulos = "";
$rsA = CustomQuery("SELECT idarticulo, nombre, codigo, precio, stock FROM articulo ORDER BY nombre ASC");
while ($rsA && $dA = db_fetch_array($rsA)) {
    $codigo = trim($dA["codigo"]);
    $nombre = trim($dA["nombre"]);
    $value_display = h($codigo . ' - ' . $nombre);
    
    $listadoArticulos.= '<option data-id="'.$dA["idarticulo"].'" data-precio="'.$dA["precio"].'" data-codigo="'.h($codigo).'" data-nombre="'.h($nombre).'" data-stock="'.$dA["stock"].'" value="'.$value_display.'">';
}

// Categorías
$optionsCat = "";
$rsCat = CustomQuery("SELECT idcategoria, nombre FROM categoria ORDER BY nombre ASC");
while ($rsCat && $dCat = db_fetch_array($rsCat)) {
    $optionsCat .= '<option value="'.$dCat["idcategoria"].'">'.h($dCat["nombre"]).'</option>';
}

$optionsProv = "";
$rsProv = CustomQuery("SELECT idproveedor, denominacion FROM proveedor ORDER BY denominacion ASC");
while ($rsProv && $dProv = db_fetch_array($rsProv)) {
    $optionsProv.= '<option value="'.$dProv["idproveedor"].'">'.h($dProv["denominacion"]).'</option>';
}


// --- CARGA DE SUBCATEGORÍAS (Independiente) ---
$optionsSubCat = "";
$rsSub = CustomQuery("SELECT idsubcategoria, nombre FROM subcategoria ORDER BY nombre ASC");
while ($rsSub && $dSub = db_fetch_array($rsSub)) {
    $optionsSubCat .= '<option value="'.$dSub["idsubcategoria"].'">'.h($dSub["nombre"]).'</option>';
}
?>

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MiniGest v3 - Registro de Venta</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
    <style>
        body { background-color: #f3f4f6; font-family: 'Inter', sans-serif; color: #1f2937; margin: 0; }
        .navbar-custom { background: #111827; padding: 12px 0; box-shadow: 0 2px 10px rgba(0,0,0,0.2); }
        .nav-link-back { background: #374151; color: #fff; padding: 8px 16px; border-radius: 6px; text-decoration: none; font-size: 13px; font-weight: 600; }
        .main-card { background: #ffffff; border-radius: 12px; box-shadow: 0 10px 25px -5px rgba(0,0,0,0.1); margin: 20px auto; padding: 30px; max-width: 1200px; }
        .section-title { font-size: 12px; font-weight: 700; color: #6b7280; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 15px; border-left: 4px solid #3b82f6; padding-left: 10px; }
        .pg-label { display: block; font-size: 11px; font-weight: 600; color: #4b5563; margin-bottom: 5px; }
        .input-gral { width: 100%; height: 40px; padding: 8px 12px; border: 1px solid #d1d5db; border-radius: 8px; outline: none; transition: all 0.2s; }
        .input-gral:focus { border-color: #3b82f6; box-shadow: 0 0 3px rgba(59,130,246,0.1); }
        .input-scan { background-color: #fffde7!important; border: 1.5px solid #eab308!important; font-weight: 600; }
        .input-money { background-color: #eff6ff!important; border: 1.5px solid #3b82f6!important; color: #1e40af; text-align: right; font-weight: 700; font-size: 16px; }
        .btn-modern { border: none; border-radius: 8px; font-weight: 600; padding: 10px 20px; transition: transform 0.1s; }
        .btn-add { background: #10b981; color: white; }
        .btn-primary-alt { background: #3b82f6; color: white; }
        .display-total { background: #1f2937; color: #ffffff; padding: 20px; border-radius: 10px; text-align: right; margin-top: 20px; }
        .total-number { font-size: 32px; font-weight: 800; color: #10b981; }
        .input-locked { background:#f3f4f6!important; cursor:not-allowed; }
    </style>
</head>
<body>

<?php require_once('header.php'); ?>

<div class="container">
    <div class="main-card">
        <form id="formVenta">
            <input type="hidden" name="idmovimiento" value="<?php echo $idmovimiento;?>"> 
            <div class="section-title">Datos de la Venta</div>
            <div class="row">
                <div class="col-md-3">
                    <label class="pg-label">Fecha</label>
                    <input type="date" name="fecha" class="input-gral" value="<?php echo date('Y-m-d');?>">
                </div>
                <div class="col-md-9">
                    <label class="pg-label">Cliente (Busqueda por RUC ó Nombre)</label>
                    <div class="input-group">
                        <input type="text" id="buscar_cliente_display" list="lista_clientes" class="input-gral" placeholder="Escriba para buscar cliente..." autocomplete="off">
                        <span class="input-group-btn">
                            <button class="btn btn-default" style="height:40px; border-radius: 0 8px 8px 0;" type="button" data-toggle="modal" data-target="#modalCliente"><b>+</b></button>
                        </span>
                    </div>
                    <datalist id="lista_clientes"><?php echo $listadoClientes;?></datalist>
                    <input type="hidden" id="idcliente_real" name="idcliente">
                </div>
            </div>
            <hr style="margin: 25px 0;">
            <div class="section-title">Detalle de la Venta</div>
            <div class="row" style="background: #f9fafb; padding: 20px; border-radius: 12px; border: 1px solid #edf2f7; margin-bottom: 20px;">
                <div class="col-md-3" style="margin-bottom: 15px;">
                    <label class="pg-label">Código - Escáner</label>
                    <input type="text" id="codigo_articulo_scan" class="input-gral input-scan" autocomplete="off" autofocus placeholder="Escáner...">
                </div>
                <div class="col-md-9" style="margin-bottom: 15px;">
                    <label class="pg-label">Nombre - Manual</label>
                    <div class="input-group">
                        <input type="text" id="nombre_articulo_buscar" list="lista_articulos" class="input-gral" autocomplete="off" placeholder="Escriba para buscar por nombre...">
                        <span class="input-group-btn">
                            <button class="btn btn-default" style="height:40px; border-radius: 0 8px 8px 0;" type="button" data-toggle="modal" data-target="#modalArticulo"><b>+</b></button>
                        </span>
                    </div>
                    <datalist id="lista_articulos"><?php echo $listadoArticulos;?></datalist>
                </div>
                <div class="col-md-2 col-xs-6">
                    <label class="pg-label">Stock</label>
                    <input type="text" id="stock_tmp" class="input-gral" style="background:#f3f4f6; text-align:center; font-weight:bold;" readonly>
                </div>
                <div class="col-md-2 col-xs-6">
                    <label class="pg-label">Precio</label>
                    <input type="text" id="precio_tmp" class="input-gral" style="background:#f3f4f6;" readonly>
                </div>
                <div class="col-md-2 col-xs-6">
                    <label class="pg-label">Cantidad</label>
                    <input type="number" id="cant_tmp" value="1" class="input-gral" style="text-align: center;">
                </div>
                <div class="col-md-3 col-xs-6">
                    <label class="pg-label">Importe (Editable)</label>
                    <input type="text" id="importe_tmp" class="input-gral input-money" disabled>
                </div>
                <div class="col-md-3 col-xs-12">
                    <label class="pg-label">&nbsp;</label>
                    <button type="button" id="btn_agregar_art" class="btn btn-modern btn-add btn-block" style="height:40px;">AGREGAR</button>
                </div>
            </div>  

            <table class="table">
                <thead>
                    <tr>
                        <th>Artículo</th>
                        <th class="text-right">Precio</th>
                        <th class="text-right">Importe</th>
                        <th class="text-center">Cantidad</th>
                        <th class="text-right">Subtotal</th>
                        <th width="50"></th>
                    </tr>
                </thead>
                <tbody id="tbody_articulos"></tbody>
            </table>

            <div class="display-total">
                <span style="opacity: 0.7; font-size: 12px;">TOTAL VENTA</span><br>
                <span id="total_venta_gs" class="total-number">Gs. 0</span>
            </div>

            <hr style="margin: 30px 0;">

            <div class="section-title">Información del Cobro</div>
            <div class="row">
                <div class="col-md-2">
                    <label class="pg-label">Cuenta</label>
                    <select id="sel_cuenta" class="input-gral"><option value="">-- Seleccione --</option><?php echo $optionsCuentas;?></select>
                </div>
                <div class="col-md-2">
                    <label class="pg-label">Forma de Cobro</label>
                    <select id="sel_tipo" class="input-gral"><option value="">-- Seleccione --</option><?php echo $optionsTipos;?></select>
                </div>
                <div class="col-md-3">
                    <label class="pg-label">Importe</label>
                    <input type="text" id="monto_cobro_tmp" class="input-gral input-money">
                </div>
                <div class="col-md-3">
                    <label class="pg-label">Nº de Comprobante</label>
                    <input type="text" id="nro_comprobante" name="nro_comprobante" class="input-gral">
                </div>
                <div class="col-md-2">
                    <label class="pg-label">&nbsp;</label>
                    <button type="button" id="btn_agregar_cobro" class="btn btn-modern btn-add btn-block" style="height:40px;">AGREGAR</button>
                </div>
            </div>
            <table class="table" style="margin-top: 15px;"><tbody id="tbody_cobros"></tbody></table>

            <div class="row" style="display: flex; align-items: center; justify-content: flex-end; margin-top: 20px;">
                <div class="col-md-4 text-right">
                    <div style="font-size: 18px; font-weight: 700;">
                        VUELTO: <span id="vuelto_gs" style="color:#10b981;">Gs. 0</span>
                    </div>
                </div>
                <div class="col-md-5 text-right">
                
                    <a href="venta_list.php" 
                    class="btn btn-modern btn-primary-alt" style="margin-left: 10px; padding: 10px 25px;">
                            CANCELAR
                    </a>                    
                    <button type="button" id="btn_finalizar" class="btn btn-modern btn-success" style="margin-left: 10px; padding: 10px 25px;">
                        F10 - FINALIZAR
                    </button>
                </div>
            </div>
            <input type="hidden" id="idarticulo_tmp">
            <input type="hidden" id="codigo_articulo_tmp">
            <input type="hidden" id="nombre_articulo_tmp">
        </form>
    </div>
</div>

<div class="modal fade" id="modalCliente" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content" style="border-radius: 12px; border: none;">
            <div class="modal-header" style="background:#3b82f6; color:white; border-radius: 12px 12px 0 0;"><h4 class="modal-title">Registrar Nuevo Cliente</h4></div>
            <div class="modal-body">
                <div class="row">
                    <div class="col-sm-6"><label class="pg-label">RUC / C.I.</label><input type="text" id="nuevo_ruc" class="input-gral"></div>
                    <div class="col-sm-6"><label class="pg-label">Teléfono</label><input type="text" id="nuevo_telefono" class="input-gral"></div>
                </div>
                <div class="row" style="margin-top:10px;"><div class="col-sm-12"><label class="pg-label">Denominación</label><input type="text" id="nuevo_nombre_cli" class="input-gral"></div></div>
                <div class="row" style="margin-top:10px;">
                    <div class="col-sm-8"><label class="pg-label">Dirección</label><input type="text" id="nueva_direccion" class="input-gral"></div>
                    <div class="col-sm-4">
                        <label class="pg-label">Ciudad</label>
                        <select id="nueva_idciudad" class="input-gral"><option value="">-- Ciudad --</option><?php echo $optionsCiudades;?></select>
                    </div>
                </div>
                <div class="row" style="margin-top:10px;">
                    <div class="col-sm-12">
                        <label class="pg-label">Observación</label>
                        <textarea id="nueva_observacion" class="input-gral" style="height:50px; resize:none;"></textarea>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-modern btn-secondary" data-dismiss="modal">Cancelar</button>
                <button type="button" class="btn btn-modern btn-success" id="btn_guardar_cliente">Guardar Cliente</button>
            </div>
        </div>
    </div>
</div>

<div class="modal fade" id="modalArticulo" tabindex="-1">
    <div class="modal-dialog modal-lg">
        <div class="modal-content" style="border-radius: 12px; border: none;">
            <!-- <div class="modal-header" style="background:#10b981; color:white; border-radius: 12px 12px 0 0;"> -->
            <div class="modal-header" style="background:#3b82f6; color:white; border-radius: 12px 12px 0 0;">
                <h4 class="modal-title">Nuevo Artículo</h4>
            </div>
            <div class="modal-body">
                <div class="row">
                    <div class="col-sm-3"><label class="pg-label">Fecha Carga</label><input type="date" id="nuevo_fecha_carga" class="input-gral" value="<?php echo date('Y-m-d'); ?>"></div>
                    <div class="col-sm-3"><label class="pg-label">Prefijo</label><input type="text" id="nuevo_prefijo" class="input-gral"></div>
                    <div class="col-sm-3"><label class="pg-label">Sufijo</label><input type="text" id="nuevo_sufijo" class="input-gral"></div>
                    <div class="col-sm-3"><label class="pg-label">Stock Inicial</label><input type="number" id="nuevo_stock_art" class="input-gral" value="0"></div>
                </div>
                <div class="row" style="margin-top:10px;">
                    <div class="col-sm-12"><label class="pg-label">Nombre del Artículo *</label><input type="text" id="nuevo_nombre_art" class="input-gral"></div>
                </div>
                <div class="row" style="margin-top:10px;">
                    <div class="col-sm-6">
                        <label class="pg-label">Categoría</label>
                        <select id="nuevo_idcategoria" class="input-gral">
                            <option value="">-- Seleccione --</option>
                            <?php echo $optionsCat; ?>
                        </select>
                    </div>
                    <div class="col-sm-6">
                        <label class="pg-label">Subcategoría</label>
                        <select id="nuevo_idsubcategoria" class="input-gral">
                            <option value="">-- Seleccione --</option>
                            <?php echo $optionsSubCat; ?>
                        </select>
                    </div>
                </div>
                <div class="row" style="margin-top:10px;">
                    <div class="col-sm-4"><label class="pg-label">Costo</label><input type="text" id="nuevo_costo_art" class="input-money input-gral"></div>
                    <div class="col-sm-4"><label class="pg-label">Precio Venta *</label><input type="text" id="nuevo_precio_art" class="input-money input-gral"></div>
                    
                </div>
                <div class="row" style="margin-top:10px;">
                <div class="col-sm-8">
                    <label class="pg-label">Proveedor</label>
                    <select id="nuevo_idproveedor" class="input-gral">
                        <option value="">-- Seleccione --</option>
                        <?php echo $optionsProv; ?>
                    </select>
                </div>
                </div>
                <div class="row" style="margin-top:10px;">
                    <div class="col-sm-12"><label class="pg-label">Observación</label><textarea id="nuevo_obs_art" class="input-gral" style="height:60px; resize:none;"></textarea></div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Cancelar</button>
                <button type="button" class="btn btn-modern btn-add" id="btn_guardar_articulo">Guardar Artículo</button>
            </div>
        </div>
    </div>
</div>

<?php require_once('pie_pagina.php'); ?>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script>
function p(n) { return Number(n).toLocaleString('de-DE'); }
function formatMiles(n) { return n.toString().replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, "."); }
function cleanPoints(s) { return parseFloat(s.toString().replace(/\./g, '')) || 0; }

// --- 1. CLIENTE ---
$('#buscar_cliente_display').on('change', function(){
    let val = $(this).val().trim();
    let opt = $('#lista_clientes option').filter(function() {
        return $(this).val().trim() === val;
    });
    if(opt.length){
        $('#idcliente_real').val(opt.attr('data-id'));
        $(this).addClass('input-locked').prop('readonly', true);
    } else {
        $('#idcliente_real').val('');
        $(this).removeClass('input-locked').prop('readonly', false);
    }
});

$('#buscar_cliente_display').on('dblclick', function(){
    $(this).removeClass('input-locked').prop('readonly', false);
    $('#idcliente_real').val('');
    $(this).val('').focus();
});

// --- 2. ESCÁNER: AGREGA DIRECTO A LA LISTA ---
$('#codigo_articulo_scan').on('keydown', function(e){
    if(e.key === 'Enter' || e.keyCode === 13){
        e.preventDefault();
        procesarEscaneo();
        return false;
    }
});

let timerScan = null;
$('#codigo_articulo_scan').on('input', function() {
    clearTimeout(timerScan);
    let val = $(this).val().replace(/\s/g, ''); // Borro espacios
    
    // Si es EAN8/EAN13 agrego automático
    if(/^\d{8,13}$/.test(val)) {
        timerScan = setTimeout(() => {
            procesarEscaneo();
        }, 50);
    }
});

function procesarEscaneo(){
    let codigo = $('#codigo_articulo_scan').val().replace(/\s/g, '');
    
    if(codigo === ''){
        $('#codigo_articulo_scan').focus();
        return;
    }
    
    let optCodigo = $('#lista_articulos option').filter(function() {
        return $(this).attr('data-codigo').toLowerCase() === codigo.toLowerCase();
    });
    
    if(optCodigo.length > 0) {
        setTempArt(optCodigo);
        addArt(); // Agrega directo
        resetTodoArticulo(); // Limpia todo y vuelve al campo código
    } else {
        resetTodoArticulo();
    }
}

// --- 3. MANUAL: BUSCAR POR NOMBRE, SALTA A IMPORTE ---
$('#nombre_articulo_buscar').on('input', function() {
    let val = $(this).val();
    let opt = $('#lista_articulos option').filter(function() {
        return $(this).val() === val;
    });
    
    if (opt.length > 0) {
        setTempArt(opt);
        $('#importe_tmp').prop('disabled', false).val('');
        $('#importe_tmp').focus().select();
    }
});

$('#nombre_articulo_buscar').on('keydown', function(e){
    if(e.key === 'Enter' || e.keyCode === 13){
        e.preventDefault();
        let val = $(this).val().trim();
        let opt = $('#lista_articulos option').filter(function() {
            return $(this).val() === val;
        });
        if (opt.length > 0) {
            setTempArt(opt);
            $('#importe_tmp').prop('disabled', false).val('');
            $('#importe_tmp').focus().select();
        }
        return false;
    }
});

function cargarArticuloManual(opt){
    setTempArt(opt);
    $('#importe_tmp').prop('disabled', false).val('');
    setTimeout(() => {
        $('#importe_tmp').focus().select();
    }, 50);
}
// --- FUNCIONES COMUNES ---
function limpiarCamposArticulo(){
    $('#idarticulo_tmp').val("");
    $('#precio_tmp').val(""); 
    $('#stock_tmp').val("");
    $('#importe_tmp').val("").prop('disabled', true);
    $('#cant_tmp').val("1"); 
}

function resetTodoArticulo(){
    $('#codigo_articulo_scan').val("").focus();
    $('#nombre_articulo_buscar').val("");
    limpiarCamposArticulo();
}

function setTempArt(opt){
    $('#idarticulo_tmp').val(opt.attr('data-id'));
    $('#codigo_articulo_tmp').val(opt.attr('data-codigo'));
    $('#nombre_articulo_tmp').val(opt.attr('data-nombre'));
    $('#stock_tmp').val(opt.attr('data-stock'));
    $('#precio_tmp').val(formatMiles(opt.attr('data-precio')));
    $('#importe_tmp').val(formatMiles(opt.attr('data-precio')));
}

function addArt() {
    let id = $('#idarticulo_tmp').val();
    let nom = $('#nombre_articulo_tmp').val();
    let cod = $('#codigo_articulo_tmp').val();
    let preL = cleanPoints($('#precio_tmp').val());
    let can = parseFloat($('#cant_tmp').val()) || 0;
    
    let preV = cleanPoints($('#importe_tmp').val());
    if(preV === 0) preV = preL;

    // --- NUEVAS VALIDACIONES CON ALERTAS ---
    
    // 1. Validar que se haya seleccionado un artículo
    if (!id || id === "") {
        alert("⚠️ Debe seleccionar un artículo de la lista o escanear uno.");
        $('#codigo_articulo_scan').focus();
        return;
    }

    // 2. Validar que el precio de lista sea válido (que el artículo tenga precio cargado)
    if (preL <= 0) {
        alert("⚠️ El artículo seleccionado no tiene un precio de venta válido.");
        return;
    }

    // 3. Validar que la cantidad sea al menos 1
    if (can < 1) {
        alert("⚠️ La cantidad debe ser igual o mayor a 1.");
        $('#cant_tmp').focus().select();
        return;
    }

    // 4. Validar que el importe (precio de venta final) no sea 0
    if (preV <= 0) {
        alert("⚠️ El importe de venta no puede ser 0.");
        $('#importe_tmp').focus().select();
        return;
    }

    // --- FIN DE VALIDACIONES ---

    let filaExistente = $('#tbody_articulos tr[data-id="' + id + '"]');
    
    if(filaExistente.length > 0) {
        let cantActual = parseFloat(filaExistente.find('.cant-art').text()) || 0;
        let nuevaCant = cantActual + can;
        let nuevoSub = preV * nuevaCant;
        
        filaExistente.attr('data-imp', nuevoSub);
        filaExistente.find('.cant-art').text(nuevaCant);
        filaExistente.find('.subtotal-art').html('<b>' + p(nuevoSub) + '</b>');
        filaExistente.find('input[name="cant_art[]"]').val(nuevaCant);
        filaExistente.find('input[name="prec_vta[]"]').val(preV);
        
        filaExistente.css('background','#dcfce7').animate({backgroundColor:'#fff'}, 400);
    } else {
        let sub = preV * can;
        $('#tbody_articulos').append(`<tr data-imp="${sub}" data-id="${id}">
            <td><b>${nom}</b><br><small class="text-muted">${cod}</small>
                <input type="hidden" name="id_art[]" value="${id}">
                <input type="hidden" name="prec_vta[]" value="${preV}">
                <input type="hidden" name="cant_art[]" value="${can}">
            </td>
            <td class="text-right">${p(preL)}</td>
            <td class="text-right">${p(preV)}</td>
            <td class="text-center cant-art">${can}</td>
            <td class="text-right subtotal-art"><b>${p(sub)}</b></td>
            <td><button type="button" class="btn btn-link btn-borrar-fila" style="color:#ef4444; font-size: 24px; padding: 0 10px; line-height: 1; text-decoration: none;">&times;</button></td>
        </tr>`);
    }
    
    sumA();
    resetTodoArticulo(); 
}

// --- COBROS ---
$('#nro_comprobante, #importe_tmp').on('keydown', function(e) { 
    if (e.key === "Enter") { 
        e.preventDefault(); 
        (this.id==='importe_tmp')? addArt() : addCobro(); 
    } 
});

$('#monto_cobro_tmp').on('keydown', function(e) { 
    if (e.key === "Enter") { 
        e.preventDefault(); 
        $('#nro_comprobante').focus(); // Enviamos el foco al ID específico
    } 
});


$('#monto_cobro_tmp, #importe_tmp, #nuevo_precio_art').on('input', function() { $(this).val(formatMiles($(this).val())); });

function addCobro() {
    let valC = $("#sel_cuenta").val();
    let txtC = $("#sel_cuenta option:selected").text();
    let valT = $("#sel_tipo").val();
    let txtT = $("#sel_tipo option:selected").text();
    let mon = cleanPoints($('#monto_cobro_tmp').val());
    let nro = $('#nro_comprobante').val().trim(); // Capturamos el comprobante

    // --- RESTRICCIÓN CON FLASH ALERT ---
    if (!valC) {
        alert("⚠️ Debe seleccionar una Cuenta.");
        $("#sel_cuenta").focus();
        return;
    }
    if (!valT) {
        alert("⚠️ Debe seleccionar una Forma de Cobro.");
        $("#sel_tipo").focus();
        return;
    }
    if (mon <= 0) {
        alert("⚠️ Debe ingresar un Importe válido.");
        $('#monto_cobro_tmp').focus();
        return;
    }

    // Si el nro de comprobante existe, lo formateamos para mostrarlo
    let displayNro = nro !== "" ? ` | Comp: <b>${nro}</b>` : "";

    // --- AGREGAR A LA LISTA CON EL NRO DE COMPROBANTE ---
    $('#tbody_cobros').append(`<tr data-mon="${mon}">
        <td>
            <span class="label label-info">${txtT}</span> 
            <b>${txtC}</b> 
            ${displayNro}
            <input type="hidden" name="id_cuenta[]" value="${valC}">
            <input type="hidden" name="id_tipo[]" value="${valT}">
            <input type="hidden" name="monto_cobro[]" value="${mon}">
            <input type="hidden" name="nro_cobro[]" value="${nro}">
        </td>
        <td class="text-right"><b>${p(mon)}</b></td>
        <td width="50">
            <button type="button" class="btn btn-link btn-borrar-fila" style="color:#ef4444; font-size: 24px; padding: 0 10px; line-height: 1; font-weight: bold; text-decoration: none;">&times;</button>
        </td>
    </tr>`);

    sumC(); 
    // Limpieza de campos
    $('#monto_cobro_tmp').val("");
    $('#nro_comprobante').val("");
    $('#sel_cuenta').val("");
    $('#sel_tipo').val("");
}

function sumA() {
    let t = 0; $('#tbody_articulos tr').each(function() { t += parseFloat($(this).attr('data-imp')) || 0; });
    $('#total_venta_gs').html("Gs. " + p(t)); calcularVuelto();
}

function sumC() { calcularVuelto(); }

function calcularVuelto(){
    let tv = 0; $('#tbody_articulos tr').each(function() { tv += parseFloat($(this).attr('data-imp')) || 0; });
    let tc = 0; $('#tbody_cobros tr').each(function() { tc += parseFloat($(this).data('mon')) || 0; });
    let v = tc - tv;
    $('#vuelto_gs').text("Gs. " + p(v > 0 ? v : 0)).css('color', v >= 0 ? '#10b981' : '#ef4444');
}

$(document).on('click', '.btn-borrar-fila', function(){ $(this).closest('tr').remove(); sumA(); });

$('#btn_agregar_art').on('click', addArt);
$('#btn_agregar_cobro').on('click', addCobro);

// --- ACTUALIZACIÓN DE LA FUNCIÓN GUARDAR CLIENTE ---
// GUARDAR CLIENTE DESDE MODAL (Corrección basada en registrar_venta_aux.php)
$('#btn_guardar_cliente').on('click', function(){
    const d = {
        ruc: $('#nuevo_ruc').val().trim(),
        nombre: $('#nuevo_nombre_cli').val().trim(),
        telefono: $('#nuevo_telefono').val().trim(),
        direccion: $('#nueva_direccion').val().trim(),
        idciudad: $('#nueva_idciudad').val(),
        obs: $('#nueva_observacion').val().trim()
    };

    // Restricciones: Validación de campos obligatorios
    if(!d.ruc || !d.nombre) { 
        alert('Por favor, complete el RUC y la Denominación del cliente.'); 
        return; 
    }

    $.post('guardar_cliente.php', d, function(res){
        if(res.ok){
            // Si el guardado es exitoso, actualizamos la vista principal
            const display = d.ruc + ' - ' + d.nombre;
            
            // Agregamos la nueva opción al datalist para que sea válida en el sistema
            $('#lista_clientes').append(`<option data-id="${res.idcliente}" value="${display}">`);
            
            // Seteamos el cliente recién creado en el buscador
            $('#buscar_cliente_display').val(display).addClass('input-locked').prop('readonly', true);
            $('#idcliente_real').val(res.idcliente);
            
            // Cerramos el modal y limpiamos campos
            $('#modalCliente').modal('hide');
            $('#modalCliente input, #modalCliente textarea').val('');
            $('#nueva_idciudad').val('');
            
            alert('✅ Cliente registrado y seleccionado correctamente.');
        } else {
            alert("❌ Error al guardar: " + res.message);
        }
    }, 'json').fail(function() {
        alert('Error crítico: No se pudo conectar con guardar_cliente.php');
    });
});

// Carga dinámica de subcategorías al cambiar categoría
$('#nuevo_idcategoria').on('change', function() {
    let idcat = $(this).val();
    if(idcat) {
        $.post('get_subcategorias.php', {idcategoria: idcat}, function(data) {
            $('#nuevo_idsubcategoria').html(data);
        });
    }
});

// 1. Formateo en tiempo real para el campo Costo
$('#nuevo_costo_art').on('input', function() {
    $(this).val(formatMiles($(this).val()));
});

// 2. Actualización de la función de guardado
$('#btn_guardar_articulo').on('click', function(){
    const d = { 
        prefijo_cod: $('#nuevo_prefijo').val(),
        // Se elimina la línea de 'codigo' ya que se genera en el backend
        sufijo_cod: $('#nuevo_sufijo').val(),
        nombre: $('#nuevo_nombre_art').val(), 
        idcategoria: $('#nuevo_idcategoria').val(),
        idsubcategoria: $('#nuevo_idsubcategoria').val(),
        costo: cleanPoints($('#nuevo_costo_art').val()), 
        precio: cleanPoints($('#nuevo_precio_art').val()),
        stock: $('#nuevo_stock_art').val() || 0,
        idproveedor: $('#nuevo_idproveedor').val(),
        fecha_carga: $('#nuevo_fecha_carga').val(),
        observacion: $('#nuevo_obs_art').val()
    };

    // Validaciones esenciales restantes
    if(!d.nombre) { 
        alert("⚠️ El nombre del artículo es obligatorio."); 
        $('#nuevo_nombre_art').focus();
        return; 
    }
    if(d.precio <= 0) { 
        alert("⚠️ El precio de venta debe ser mayor a 0."); 
        $('#nuevo_precio_art').focus();
        return; 
    }

    $('#btn_guardar_articulo').on('click', function(){
    const d = { 
        prefijo_cod: $('#nuevo_prefijo').val(),
        sufijo_cod: $('#nuevo_sufijo').val(),
        nombre: $('#nuevo_nombre_art').val(), 
        idcategoria: $('#nuevo_idcategoria').val(),
        idsubcategoria: $('#nuevo_idsubcategoria').val(),
        costo: cleanPoints($('#nuevo_costo_art').val()), 
        precio: cleanPoints($('#nuevo_precio_art').val()),
        stock: $('#nuevo_stock_art').val() || 0,
        idproveedor: $('#nuevo_idproveedor').val(),
        fecha_carga: $('#nuevo_fecha_carga').val(),
        observacion: $('#nuevo_obs_art').val()
    };

    // Validaciones básicas antes de enviar
    if(!d.nombre) { alert("⚠️ El nombre es obligatorio."); return; }
    if(d.precio <= 0) { alert("⚠️ El precio debe ser mayor a 0."); return; }

    $.post('guardar_articulo.php', d, function(res){ 
    if(res.ok){ 
        alert("✅ " + res.message);
        
        // Agregar al datalist dinámicamente
        let nuevoArt = res.data;
        let display = nuevoArt.codigo + ' - ' + nuevoArt.nombre;
        $('#lista_articulos').append(
            `<option data-id="${nuevoArt.id}" 
                     data-precio="${nuevoArt.precio}" 
                     data-codigo="${nuevoArt.codigo}" 
                     data-nombre="${nuevoArt.nombre}" 
                     data-stock="${nuevoArt.stock}" 
                     value="${display}">`
        );

        $('#modalArticulo').modal('hide');
        // Limpiar campos del modal...
    } else {
        alert("❌ Error: " + res.message);
    }
}, 'json');
});

// Aplicar formato de miles al costo también
$('#nuevo_costo_art').on('input', function() { $(this).val(formatMiles($(this).val())); });

$('#btn_finalizar').on('click', function(){
    let btn = $(this);
    
    if($('#tbody_articulos tr').length === 0 || !$('#idcliente_real').val()){ 
        alert('Debe seleccionar un cliente y al menos un artículo.'); 
        return; 
    }

    if(!confirm('¿Confirma finalizar la venta?')) return;

    // Deshabilitamos el botón para evitar envíos duplicados
    btn.prop('disabled', true).text('PROCESANDO...');

    $.post('guardar_venta.php', $('#formVenta').serialize(), function(res){ 
        if(res.ok){ 
            alert('¡Venta registrada con éxito!'); 
            location.reload(); 
        } else {
            alert('Error: ' + res.message);
            btn.prop('disabled', false).text('F10 - FINALIZAR'); // Re-habilitar si falló
        }
    }, 'json').fail(function() {
        alert('Error crítico de conexión al servidor.');
        btn.prop('disabled', false).text('F10 - FINALIZAR');
    });
});

$(document).on('keydown', function(e){ if(e.key === 'F2') $('#codigo_articulo_scan').focus().select(); if(e.key === 'F10') $('#btn_finalizar').click(); });
</script>
</body>
</html>