<?php
// vista/productos/pos.php
// 1. CONFIGURACIÓN Y CONEXIÓN
error_reporting(E_ALL);
ini_set('display_errors', 1);

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once "modelo/Db.php";

try {
    $bd = new clsbdd();
} catch (Exception $e) {
    die("Error al conectar a la base de datos: " . $e->getMessage());
}

// Alineación con las claves de sesión definidas en index.php
$usu_id = $_SESSION['usu_id'] ?? 0;
$usu_nombre_visual = $_SESSION['usu_nombre'] ?? 'S/N';

if ($usu_id == 0) {
    echo '<script type="text/javascript">window.location.href="login.php";</script>';
    echo '<meta http-equiv="refresh" content="0;url=login.php">';
    exit;
}

// 2. VERIFICAR CAJA ABIERTA (Uso estricto de bas_caja)
$res_caja = $bd->ejecutar_array("SELECT * FROM bas_caja WHERE caj_estado='ABIERTA' LIMIT 1");
$caja = (is_array($res_caja) && count($res_caja) > 0) ? $res_caja[0] : null;

if (!$caja) {
    die("<div style='padding:50px; text-align:center; font-family:sans-serif;'>
            <h1 style='color:red;'>⚠️ CAJA CERRADA</h1>
            <p>No puedes entrar al Punto de Venta POS sin abrir la caja primero desde el sistema central.</p>
            <a href='index.php?page=caja/gestionar' style='background:#f26a8d; color:#fff; padding:10px 20px; text-decoration:none; border-radius:4px; font-weight:bold;'>Abrir Caja Ahora</a>
         </div>");
}

// 3. PROCESAR VENTA EN LA BASE DE DATOS
$id_imprimir = 0;
$mensaje_guardado = "";

// Variables para propagar datos manuales al ticket vía GET
$get_contribuyente = "";
$get_ruc = "";

if (isset($_POST['cobrar'])) {
    $total = floatval($_POST['total']);
    $tipo_pago = $_POST['tipo_pago'] ?? 'EFECTIVO';
    $comprobante = $_POST['ven_comprobante'] ?? '';
    
    $entregado_input = floatval($_POST['entregado'] ?? 0);
    $monto_p1 = floatval($_POST['monto_pago1'] ?? 0); 
    $monto_p2 = floatval($_POST['monto_pago2'] ?? 0); 

    $monto_final_base_datos = 0; 
    $monto_credito = 0;          
    $db_monto_p1 = 0;            
    $db_monto_p2 = 0;            

    switch ($tipo_pago) {
        case 'EFECTIVO':
            $monto_final_base_datos = $entregado_input;
            $db_monto_p1 = $total;
            break;
            
        case 'TRANSFERENCIA':
            $monto_final_base_datos = 0; 
            $db_monto_p2 = $total;
            break;
            
        case 'CREDITO':
            $monto_final_base_datos = 0; 
            $monto_credito = $total;
            $db_monto_p2 = $total; 
            break;
            
        case 'MIXTO_EF_TR':
            $monto_final_base_datos = $monto_p1; 
            $db_monto_p1 = $monto_p1;            
            $db_monto_p2 = $monto_p2;            
            break;
            
        case 'MIXTO_EF_CR':
            $monto_final_base_datos = $monto_p1; 
            $monto_credito = $monto_p2;          
            $db_monto_p1 = $monto_p1;            
            $db_monto_p2 = $monto_p2;            
            break;
            
        case 'MIXTO_TR_CR':
            $monto_final_base_datos = 0;         
            $monto_credito = $monto_p2;          
            $db_monto_p1 = $monto_p1;            
            $db_monto_p2 = $monto_p2;            
            break;
            
        case 'CORTESIA':
            $monto_final_base_datos = 0;
            $monto_credito = 0;
            $total = 0;
            break;                                                                                                                                                                                                                                                                                                    
    }

    $vuelto = 0;
    if ($tipo_pago == 'EFECTIVO') {
        $vuelto = $entregado_input - $total;
    } elseif ($tipo_pago == 'MIXTO_EF_TR' || $tipo_pago == 'MIXTO_EF_CR') {
        $vuelto = $entregado_input - $monto_p1;
    }
    if ($vuelto < 0) $vuelto = 0;

    // Rescate del ID de la persona enviado por el formulario (Bastonera o Profesor)
    $bas_id_form = isset($_POST['bas_id']) ? intval($_POST['bas_id']) : 0;

    // Guardamos temporalmente si el operador ingresó datos de factura manuales
    if (isset($_POST['tipo_documento']) && $_POST['tipo_documento'] === 'FACTURA') {
        $get_contribuyente = urlencode(trim($_POST['factura_nombre'] ?? ''));
        $get_ruc = urlencode(trim($_POST['factura_ruc'] ?? ''));
    }

    $es_credito = ($monto_credito > 0 || $tipo_pago == 'CREDITO' || $tipo_pago == 'MIXTO_EF_CR' || $tipo_pago == 'MIXTO_TR_CR');

    $estado_cxc = $es_credito ? 'PENDIENTE' : 'PAGADO';
    $saldo_pendiente_cxc = $es_credito ? $monto_credito : 0.00;
    
    $bastonera_codigo_val = ($bas_id_form > 0) ? $bas_id_form : "NULL";

    // Inserción limpia en bas_cuentas_cobrar
    $bd->carga_campos("bas_id, con_id, cxc_valor_base, cxc_descuento, cxc_valor_final, cxc_saldo_pendiente, cxc_fecha_emision, cxc_estado");
    $bd->carga_valores("$bastonera_codigo_val, 3, $total, 0.00, $total, $saldo_pendiente_cxc, NOW(), '$estado_cxc'");
    $cxc_id = $bd->insertar("bas_cuentas_cobrar");

    if ($cxc_id > 0) {
        
        // ====================================================================
        // NUEVO: CONTROL E INSERCIÓN COMPLETA EN LA TABLA `bas_ventas`
        // ====================================================================
        $id_caja_activa = (!empty($caja['caj_codigo'])) ? intval($caja['caj_codigo']) : "NULL";

        $bd->carga_campos("caj_id, bas_id, usu_id, ven_fecha, ven_tipo_pago, ven_total, ven_monto_p1, ven_monto_p2, ven_entregado, ven_vuelto, ven_comprobante, ven_estado");
        $bd->carga_valores("$id_caja_activa, $bastonera_codigo_val, $usu_id, NOW(), '$tipo_pago', $total, $db_monto_p1, $db_monto_p2, $entregado_input, $vuelto, '$comprobante', 1");
        $bd->insertar("bas_ventas");
        // ====================================================================

        $monto_inmediato = $total - $saldo_pendiente_cxc;
        if ($monto_inmediato > 0) {
            $bd->carga_campos("cxc_id, pag_monto, pag_metodo, pag_fecha");
            $bd->carga_valores("$cxc_id, $monto_inmediato, '$tipo_pago', NOW()");
            $bd->insertar("bas_pagos");
        }

        // Registrar en créditos únicamente si hay monto de saldo y el cliente existe en el sistema
        if ($monto_credito > 0 && $bas_id_form > 0) {
            $bd->carga_campos("bas_id, cre_monto, cre_motivo, cre_fecha");
            $bd->carga_valores("$bastonera_codigo_val, $monto_credito, 'Consumo en punto de venta POS - Credito', NOW()");
            $bd->insertar("bas_creditos");
        }

        if (isset($_POST['productos']) && is_array($_POST['productos'])) {
            foreach ($_POST['productos'] as $pro_id_form => $cant) {
                $pro_id_form = intval($pro_id_form);
                $amount = intval($cant);
                
                $res_p = $bd->ejecutar_array("SELECT pro_precio_venta FROM bas_productos WHERE pro_id=$pro_id_form");
                if($res_p && count($res_p) > 0){
                    $p_info = $res_p[0];
                    $precio_v = ($tipo_pago == 'CORTESIA') ? 0 : $p_info['pro_precio_venta'];
                    $sub = $amount * $precio_v;
                    
                    $bd->carga_campos("cxc_id, pro_id, det_cantidad, det_precio_unitario, det_subtotal");
                    $bd->carga_valores("$cxc_id, $pro_id_form, $amount, $precio_v, $sub");
                    $bd->insertar("bas_venta_detalles");
                    
                    $bd->ejecutar("UPDATE bas_productos SET pro_stock = pro_stock - $amount WHERE pro_id = $pro_id_form");
                }
            }
        }
        $id_imprimir = $cxc_id;
        $mensaje_guardado = "¡VENTA REGISTRADA CON ÉXITO! Comprobante Nro: " . $cxc_id . " | Total Cobrado: $" . number_format($total, 2) . " | Método: " . $tipo_pago . " | Vuelto: $" . number_format($vuelto, 2);
    } else {
        $mensaje_guardado = "⚠️ ERROR CRÍTICO: No se pudo guardar la venta en la base de datos debido a restricciones de Integridad de Clientes.";
    }
}

$cat_id_get = isset($_GET['cat']) ? intval($_GET['cat']) : 0;
$categorias = $bd->ejecutar_array("SELECT * FROM bas_categorias WHERE cat_estado=1") ?: [];

$sql_p = "SELECT * FROM bas_productos WHERE pro_estado=1";
if ($cat_id_get > 0) $sql_p .= " AND cat_id=$cat_id_get";
$sql_p .= " ORDER BY pro_nombre ASC";
$productos = $bd->ejecutar_array($sql_p) ?: [];
?>

<style>
    .pos-container { display: flex; flex-direction: column; height: calc(100vh - 110px); overflow: hidden; margin: -24px; background: #f0f2f5; }
    .header-pos { background: #111b24; color: white; padding: 12px 25px; font-weight: bold; font-size: 1.1rem; flex-shrink: 0; display: flex; justify-content: space-between; align-items: center; border-bottom: 2px solid #f26a8d; }
    .main-pos { display: flex; flex: 1; overflow: hidden; padding: 15px; gap: 15px; }
    .left-pos { flex: 1; display: flex; flex-direction: column; min-width: 0; }
    .categories { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 10px; flex-shrink: 0; }
    
    .btn-cat { padding: 10px 20px; background: white; border-radius: 8px; text-decoration: none; color: #333; font-weight: 600; border: 1px solid #ddd; white-space: nowrap; font-size: 13px; text-align: center; }
    .btn-cat.active { background: #f26a8d; color: white; border-color: #f26a8d; }
    
    .products-grid { 
        display: grid; 
        grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); 
        align-content: start; 
        gap: 12px; 
        background: #e9ecef; 
        padding: 15px; 
        border-radius: 10px; 
        flex: 1;
        overflow-y: auto !important; 
    }
    
    .card-prd { background: white; padding: 15px 10px; border-radius: 10px; text-align: center; cursor: pointer; box-shadow: 0 2px 5px rgba(0,0,0,0.05); border: 2px solid transparent; transition: 0.2s; position: relative; user-select: none; }
    .card-prd:hover { border-color: #f26a8d; transform: scale(1.02); }
    
    .badge-stock { position: absolute; top: 5px; right: 5px; background: #2c3e50; color: white; font-size: 10px; padding: 2px 6px; border-radius: 10px; font-weight: bold; }
    .stock-bajo { background: #e74c3c !important; }

    .right-pos { width: 380px; background: white; border-radius: 10px; display: flex; flex-direction: column; box-shadow: 0 4px 15px rgba(0,0,0,0.05); height: 100%; }
    .cart-header { padding: 15px; font-weight: bold; border-bottom: 1px solid #eee; flex-shrink: 0; background: #f8f9fa; border-radius: 10px 10px 0 0; color: #111b24; }
    
    .cart-list { flex: 1; overflow-y: auto; padding: 10px 15px; background: #fff; }
    .cart-item { display: flex; flex-direction: column; padding: 10px 0; border-bottom: 1px solid #f1f1f1; gap: 6px; }
    .cart-item-info { display: flex; justify-content: space-between; font-weight: 600; font-size: 14px; color: #2c3e50; }
    .cart-item-actions { display: flex; align-items: center; gap: 8px; }
    
    .btn-qty { 
        background: #eab8c433; color: #333; border: 1px solid #ccc; 
        width: 28px; height: 28px; border-radius: 6px; font-size: 15px; 
        font-weight: bold; cursor: pointer; display: flex; align-items: center; justify-content: center; 
    }
    .btn-qty:active { background: #ddd; }
    .qty-label { font-size: 14px; font-weight: bold; min-width: 20px; text-align: center; }
    
    .btn-remove-all { color: #e74c3c; border: none; background: none; font-size: 16px; cursor: pointer; margin-left: auto; padding: 4px; }
    .btn-remove-all:hover { transform: scale(1.1); }

    .cart-footer { padding: 15px; background: #f8f9fa; border-top: 2px solid #ddd; flex-shrink: 0; }
    .total-box { background: #111b24; color: white; padding: 12px; border-radius: 8px; margin-bottom: 10px; }
    .total-row { display: flex; justify-content: space-between; font-weight: bold; font-size: 20px; }
    
    .btn-cobrar { background: #00ced1; color: white; width: 100%; border: none; padding: 12px; font-size: 18px; font-weight: bold; border-radius: 8px; cursor: pointer; transition: 0.3s; }
    .btn-cobrar:hover { background: #00b5b8; }
    
    .form-control-pos { width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 5px; margin-bottom: 8px; font-size: 14px; box-sizing: border-box; }
    #lista_resultados_ben { position: absolute; z-index: 1050; width: 100%; background: white; border: 1px solid #ccc; max-height: 180px; overflow-y: auto; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }

    .alert-pos-status { background: #2ecc71; color: white; padding: 10px 20px; font-weight: bold; text-align: center; font-size: 14px; }
    .alert-pos-error { background: #e74c3c; color: white; padding: 10px 20px; font-weight: bold; text-align: center; font-size: 14px; }

    @media (max-width: 992px) {
        .pos-container { height: auto; overflow: visible; }
        .main-pos { flex-direction: column; height: auto; overflow: visible; }
        .right-pos { width: 100%; height: auto; }
        .products-grid { max-height: 450px; }
        .cart-list { max-height: 300px; }
    }

    @media (max-width: 576px) {
        .header-pos { flex-direction: column; gap: 6px; text-align: center; padding: 10px; font-size: 0.95rem; }
        .header-pos div { text-align: center; }
        .products-grid { grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); padding: 8px; gap: 8px; }
        .card-prd { padding: 10px 5px; }
        .card-prd div { font-size: 12px !important; }
        .total-row { font-size: 16px; }
        .btn-cobrar { font-size: 15px; padding: 10px; }
    }
</style>

<div class="pos-container">
    <?php if(!empty($mensaje_guardado)): ?>
        <div class="<?= ($id_imprimir > 0) ? 'alert-pos-status' : 'alert-pos-error' ?>">
            <?= htmlspecialchars($mensaje_guardado) ?>
        </div>
    <?php endif; ?>

    <div class="header-pos">
        <div><i class="fas fa-cash-register me-2"></i> STAGE DANCE CLASS - TERMINAL TÁCTIL (POS)</div>
        <div style="font-size: 0.88rem; opacity: 0.9;">CAJERO: <?= strtoupper(htmlspecialchars($usu_nombre_visual)) ?> | ESTADO: <span class="badge bg-success"><?= htmlspecialchars($caja['caj_estado'] ?? '') ?></span></div>
    </div>

    <div class="main-pos">
        <div class="left-pos">
            <div class="categories">
                <a href="index.php?page=productos/pos" class="btn-cat <?= $cat_id_get==0?'active':'' ?>">TODOS LOS PRODUCTOS</a>
                <?php foreach($categorias as $c): ?>
                    <a href="index.php?page=productos/pos&cat=<?= $c['cat_id'] ?>" class="btn-cat <?= $cat_id_get==$c['cat_id']?'active':'' ?>">
                        <?= htmlspecialchars($c['cat_nombre']) ?>
                    </a>
                <?php endforeach; ?>
            </div>
            <div class="products-grid">
                <?php foreach($productos as $p): 
                    $stock = intval($p['pro_stock']);
                    $claseStock = ($stock < 5) ? 'stock-bajo' : '';
                ?>
                    <div class="card-prd btn-agregar-producto" 
                         data-id="<?= $p['pro_id'] ?>"
                         data-nombre="<?= htmlspecialchars($p['pro_nombre'], ENT_QUOTES, 'UTF-8') ?>"
                         data-precio="<?= $p['pro_precio_venta'] ?>"
                         data-stock="<?= $stock ?>">
                        <span class="badge-stock <?= $claseStock ?>">Stock: <?= $stock ?></span>
                        <div style="font-weight:600; min-height:40px; margin-top:10px; font-size:14px;"><?= htmlspecialchars($p['pro_nombre']) ?></div>
                        <div style="color:#00ced1; font-weight:bold; font-size:16px;">$<?= number_format($p['pro_precio_venta'], 2) ?></div>
                    </div>
                <?php endforeach; ?>
            </div>
        </div>

        <form method="post" id="formPOS" class="right-pos" onsubmit="return validarVenta()">
            <div class="cart-header">🛒 DETALLE DE ARTÍCULOS</div>
            
            <div class="cart-list" id="cart-list">
                <div style="text-align:center; color:#999; margin-top:50px;">Carrito vacío</div>
            </div>
            
            <div class="cart-footer">
                <div style="margin-bottom: 10px;">
                    <label style="font-size:11px; font-weight:bold; color:#666;">MÉTODO PAGO</label>
                    <select name="tipo_pago" id="tipo_pago" class="form-control-pos" onchange="cambiarTipoPago(this.value)">
                        <option value="EFECTIVO">EFECTIVO</option>
                        <option value="TRANSFERENCIA">DEUNA / TRANSF. BANCARIA</option>
                        <option value="CREDITO">CRÉDITO INTERNO </option>
                        <option value="MIXTO_EF_TR">MIXTO: EFECTIVO + TRANSF.</option>
                        <option value="MIXTO_EF_CR">MIXTO: EFECTIVO + CRÉDITO</option>
                        <option value="MIXTO_TR_CR">MIXTO: TRANSF. + CRÉDITO</option>
                        <option value="CORTESIA">CORTESÍA (VALOR 0)</option>
                    </select>
                </div>

                <div id="div-tipo-documento" style="margin-bottom: 10px; background: #fdf2f4; padding: 8px; border-radius: 6px; border: 1px dashed #f26a8d;">
                    <label style="font-size:11px; font-weight:bold; color:#f26a8d;">TIPO FACTURACIÓN</label>
                    <select name="tipo_documento" id="tipo_documento" class="form-control-pos" onchange="cambiarTipoDocumento(this.value)">
                        <option value="CONSUMIDOR_FINAL">CONSUMIDOR FINAL</option>
                        <option value="FACTURA">FACTURA CON DATOS</option>
                        <option value="CLIENTE_REGISTRADO">BUSCAR ALUMNA / PROFESOR</option>
                    </select>
                </div>

                <div id="panel-factura-manual" style="display:none; background: #eef7f9; padding: 10px; border-radius: 8px; margin-bottom: 10px; border: 1px solid #00ced1;">
                    <label style="font-size:10px; font-weight:bold; color:#2c3e50;">RUC / CÉDULA</label>
                    <input type="text" name="factura_ruc" id="factura_ruc" class="form-control-pos" placeholder="Ej: 1712345678001">
                    <label style="font-size:10px; font-weight:bold; color:#2c3e50;">NOMBRES / RAZÓN SOCIAL</label>
                    <input type="text" name="factura_nombre" id="factura_nombre" class="form-control-pos" placeholder="Ej: Juan Pérez">
                </div>

                <div id="div-comprobante" style="display:none; margin-bottom: 10px;">
                    <label style="font-size:11px; font-weight:bold; color:#d35400;"># COMPROBANTE / COMPROBACIÓN</label>
                    <input type="text" name="ven_comprobante" id="ven_comprobante" class="form-control-pos" placeholder="Ej: 001245">
                </div>

                <div id="panel-mixto" style="display:none; background: #eef2f3; padding: 10px; border-radius: 8px; margin-bottom: 10px; border: 1px solid #bdc3c7;">
                    <div style="display: flex; gap: 8px;">
                        <div style="flex:1">
                            <label id="label-pago1" style="font-size:10px; font-weight:bold; color:#2c3e50;">MONTO 1</label>
                            <input type="number" name="monto_pago1" id="monto_pago1" class="form-control-pos" step="0.01" oninput="calcularSaldoMixto(1)">
                        </div>
                        <div style="flex:1">
                            <label id="label-pago2" style="font-size:10px; font-weight:bold; color:#2c3e50;">MONTO 2</label>
                            <input type="number" name="monto_pago2" id="monto_pago2" class="form-control-pos" step="0.01" oninput="calcularSaldoMixto(2)">
                        </div>
                    </div>
                </div>

                <div id="div-recibido" style="margin-bottom: 10px;">
                    <label style="font-size:11px; font-weight:bold; color:#666;">RECIBIDO EN EFECTIVO $</label>
                    <input type="number" name="entregado" id="entregado" step="0.01" value="0" class="form-control-pos" oninput="updateUI()">
                </div>

                <div id="div-pro" style="display:none; position: relative; margin-bottom: 10px;">
                    <label style="font-size:11px; font-weight:bold; color:#666;">TIPO DE CUENTA</label>
                    <select id="tipo_persona" class="form-control-pos" onchange="quitarBastonera(); $('#bus_ben').val('').focus();">
                        <option value="bastonera">💃 ALUMNA / BASTONERA</option>
                        <option value="profesor">👨‍🏫 PROFESOR / INSTRUCTOR</option>
                    </select>

                    <label style="font-size:11px; font-weight:bold; color:#666; margin-top:5px;">BUSCAR NOMBRE O IDENTIFICACIÓN</label>
                    <input type="text" id="bus_ben" class="form-control-pos" placeholder="Escriba para buscar..." onkeyup="buscarPersonaAJAX()">
                    <div id="lista_resultados_ben" style="display:none;"></div>
                    
                    <div id="ben_seleccionado" style="display:none; background:#e8f4fd; padding:12px; border-radius:8px; margin-bottom:10px; border:1px solid #f26a8d;">
                        <div style="display:flex; justify-content:space-between; align-items:center; border-bottom: 1px solid #f26a8d55; padding-bottom: 5px; margin-bottom: 5px;">
                            <span id="nom_ben" style="font-weight:bold; font-size:14px; color:#111b24;"></span>
                            <button type="button" onclick="quitarBastonera()" style="color:#e74c3c; border:none; background:none; cursor:pointer; font-size:18px; font-weight:bold;">✕</button>
                        </div>
                        <div style="text-align: center;">
                             <div id="tipo_badge_cuenta" style="font-size: 11px; color: #00ced1; font-weight: bold; text-transform: uppercase;">Estado Cuenta</div>
                             <div id="disponible_valor" style="font-size: 16px; font-weight: 700; color: #2c3e50;">Línea Autorizada Activa</div>
                        </div>
                        <input type="hidden" name="bas_id" id="bas_id" value="0">
                    </div>
                </div>

                <div class="total-box">
                    <div class="total-row"><span>TOTAL:</span><span id="txt-total">$0.00</span></div>
                    <div class="total-row" id="row-vuelto" style="font-size:15px; color:#00ced1; border-top:1px solid rgba(255,255,255,0.1); margin-top:5px; padding-top:5px;">
                        <span>VUELTO:</span><span id="txt-vuelto">$0.00</span>
                    </div>
                </div>
                
                <input type="hidden" name="total" id="input-total" value="0">
                <div id="hidden-cart"></div>
                <button type="submit" name="cobrar" class="btn-cobrar">EMITIR COMPROBANTE Y COBRAR</button>
            </div>
        </form>
    </div>
</div>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
let cart = JSON.parse(localStorage.getItem('cart_pos_bas')) || {};

$(document).ready(function() {
    $('.btn-agregar-producto').off('click').on('click', function() {
        let stock = parseInt($(this).data('stock'));
        if (stock <= 0) {
            alert("No hay existencias disponibles del artículo.");
            return;
        }
        
        let id = $(this).data('id');
        let nombre = $(this).data('nombre');
        let precio = parseFloat($(this).data('precio'));
        
        addCart(id, nombre, precio, stock);
    });
    
    updateUI();

    // ====================================================================
    // DISPARADOR DEL TICKET DE IMPRESIÓN Y LIMPIEZA DE CARRITO AUTOMÁTICA
    // ====================================================================
    <?php if($id_imprimir > 0): ?>
        // Limpiamos de inmediato el carrito en LocalStorage para dejar el POS listo
        localStorage.removeItem('cart_pos_bas');
        cart = {};
        updateUI();

        // Lanzamos la ventana emergente con el diseño del ticket térmico
        let urlTicket = "vista/ticket.php?id=<?= $id_imprimir?>";
        window.open(urlTicket, "Ticket de Venta", "width=400,height=600,top=100,left=100,menubar=no,toolbar=no,scrollbars=yes");
    <?php endif; ?>
});

function cambiarTipoPago(val) {
    $('#monto_pago1, #monto_pago2, #ven_comprobante, #entregado').val('');
    
    if (val === 'CREDITO' || val === 'MIXTO_EF_CR' || val === 'MIXTO_TR_CR') {
        $('#tipo_documento').val('CLIENTE_REGISTRADO');
        $('#div-tipo-documento').hide();
    } else {
        $('#tipo_documento').val('CONSUMIDOR_FINAL');
        $('#div-tipo-documento').show();
        quitarBastonera();
    }
    
    cambiarTipoDocumento($('#tipo_documento').val());
}

function cambiarTipoDocumento(val) {
    $('#panel-factura-manual, #div-pro').hide();
    $('#factura_ruc, #factura_nombre').val('');
    
    if (val === 'FACTURA') {
        $('#panel-factura-manual').show();
        quitarBastonera();
    } else if (val === 'CLIENTE_REGISTRADO') {
        $('#div-pro').show();
    }
    updateUI();
}

function calcularSaldoMixto(cambiado) {
    let totalVenta = parseFloat($('#input-total').val()) || 0;
    let p1 = parseFloat($('#monto_pago1').val()) || 0;
    if (cambiado === 1) {
        let dif = totalVenta - p1;
        $('#monto_pago2').val(dif > 0 ? dif.toFixed(2) : 0);
    } else {
        let p2 = parseFloat($('#monto_pago2').val()) || 0;
        let dif = totalVenta - p2;
        $('#monto_pago1').val(dif > 0 ? dif.toFixed(2) : 0);
    }
    let tipo = $('#tipo_pago').val();
    if (tipo === 'MIXTO_EF_TR' || tipo === 'MIXTO_EF_CR') {
        $('#entregado').val($('#monto_pago1').val());
    }
    updateUI();
}

function buscarPersonaAJAX() {
    let q = $('#bus_ben').val();
    if(q.length < 2) { 
        $('#lista_resultados_ben').hide(); 
        return; 
    }
    
    let tipoPersona = $('#tipo_persona').val(); 
    let accionEjecutar = (tipoPersona === 'bastonera') ? 'buscar_bastonera_pos' : 'buscar_profesor_pos';

    $.post('controlador/c_bastoneras.php', { accion: accionEjecutar, termino: q }, function(data) {
        $('#lista_resultados_ben').html(data).show();
    });
}

function seleccionarBastonera(id, nombre) {
    $('#bas_id').val(id);
    $('#nom_ben').html("💃 " + nombre);
    $('#tipo_badge_cuenta').text("CUENTA DE ALUMNA ACTIVA").css('color', '#f26a8d');
    $('#ben_seleccionado').show();
    $('#bus_ben').hide();
    $('#tipo_persona').hide();
    $('#lista_resultados_ben').hide();
}

function seleccionarProfesor(id, nombre) {
    $('#bas_id').val(id); 
    $('#nom_ben').html("👨‍🏫 " + nombre);
    $('#tipo_badge_cuenta').text("CUENTA DE PROFESOR ACTIVA").css('color', '#2c3e50');
    $('#ben_seleccionado').show();
    $('#bus_ben').hide();
    $('#tipo_persona').hide();
    $('#lista_resultados_ben').hide();
}

function quitarBastonera() {
    $('#bas_id').val(0);
    $('#ben_seleccionado').hide();
    $('#bus_ben').val('').show();
    $('#tipo_persona').show();
}

$(document).on('click', function(e) {
    if (!$(e.target).closest('#div-pro').length) {
        $('#lista_resultados_ben').hide();
    }
});

function addCart(id, name, price, stockMax) {
    if(cart[id]) {
        if(cart[id].qty >= stockMax) { 
            alert("Has alcanzado el límite físico en almacén."); 
            return; 
        }
        cart[id].qty++;
    } else {
        cart[id] = { name: name, price: price, qty: 1, stockMax: stockMax };
    }
    updateUI();
}

function remove(id) {
    if(cart[id]) {
        if(cart[id].qty > 1) {
            cart[id].qty--;
        } else {
            delete cart[id];
        }
        updateUI();
    }
}

function eliminarProductoCompleto(id) {
    if(cart[id]) {
        delete cart[id];
        updateUI();
    }
}

function updateUI() {
    let list = ''; 
    let inputs = ''; 
    let total = 0;
    let tipo = $('#tipo_pago').val();
    let entregado = parseFloat($('#entregado').val()) || 0;

    for(let id in cart) {
        let item = cart[id];
        let p_calc = (tipo === 'CORTESIA') ? 0 : item.price;
        let subtotal_item = p_calc * item.qty;
        total += subtotal_item;
        
        let cleanId = parseInt(id);
        let nameEscaped = item.name.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/"/g, '\\"');

        list += `<div class="cart-item">
                    <div class="cart-item-info">
                        <span>${item.name}</span>
                        <span>$${subtotal_item.toFixed(2)}</span>
                    </div>
                    <div class="cart-item-actions">
                        <button type="button" class="btn-qty" onclick="remove(${cleanId})">-</button>
                        <span class="qty-label">${item.qty}</span>
                        <button type="button" class="btn-qty" onclick="addCart(${cleanId}, '${nameEscaped}', ${item.price}, ${item.stockMax})">+</button>
                        <button type="button" class="btn-remove-all" onclick="eliminarProductoCompleto(${cleanId})">🗑️</button>
                    </div>
                 </div>`;
        
        inputs += `<input type="hidden" name="productos[${cleanId}]" value="${item.qty}">`;
    }

    let baseEfectivo = (tipo === 'EFECTIVO') ? total : ((tipo === 'MIXTO_EF_TR' || tipo === 'MIXTO_EF_CR') ? (parseFloat($('#monto_pago1').val()) || 0) : 0);
    let vuelto = Math.max(0, entregado - baseEfectivo);

    $('#cart-list').html(list || '<div style="text-align:center; color:#999; margin-top:50px;">Carrito vacío</div>');
    $('#hidden-cart').html(inputs);
    $('#txt-total').text('$' + total.toFixed(2));
    $('#input-total').val(total.toFixed(2));
    $('#txt-vuelto').text('$' + (baseEfectivo > 0 ? vuelto.toFixed(2) : '0.00'));

    $("#panel-mixto, #div-recibido, #row-vuelto, #div-comprobante").hide();
    
    if (tipo === 'EFECTIVO') { 
        $("#div-recibido, #row-vuelto").show(); 
    }
    else if (tipo === 'TRANSFERENCIA') { 
        $("#div-comprobante").show(); 
    }
    else if (tipo === 'MIXTO_EF_TR') { 
        $("#panel-mixto, #div-recibido, #row-vuelto, #div-comprobante").show(); 
        $("#label-pago1").text("EFECTIVO $"); $("#label-pago2").text("TRANSF. $");
    }
    else if (tipo === 'MIXTO_EF_CR') { 
        $("#panel-mixto, #div-recibido, #row-vuelto").show(); 
        $("#label-pago1").text("EFECTIVO $"); $("#label-pago2").text("CRÉDITO $");
    }
    else if (tipo === 'MIXTO_TR_CR') { 
        $("#panel-mixto, #div-comprobante").show(); 
        $("#label-pago1").text("TRANSF. $"); $("#label-pago2").text("CRÉDITO $");
    }
    else if (tipo === 'CORTESIA') {
        $("#div-comprobante").show();
    }

    localStorage.setItem('cart_pos_bas', JSON.stringify(cart));
}

function validarVenta() {
    let tipo = $('#tipo_pago').val();
    let doc = $('#tipo_documento').val();
    let total = parseFloat($('#input-total').val());
    let entregado = parseFloat($('#entregado').val()) || 0;
    
    if(Object.keys(cart).length === 0) { 
        alert("Agrega artículos al carrito antes de cobrar."); 
        return false; 
    }

    if (tipo === 'EFECTIVO' && (entregado < total)) { 
        alert("Monto en efectivo recibido es menor al total a pagar."); 
        return false; 
    }

    if (tipo.startsWith('MIXTO')) {
        let p1 = parseFloat($('#monto_pago1').val()) || 0;
        let p2 = parseFloat($('#monto_pago2').val()) || 0;
        if (Math.abs((p1 + p2) - total) > 0.01) { 
            alert("Los importes parciales no cuadran con el total."); 
            return false; 
        }
    }

    if ((tipo === 'TRANSFERENCIA' || tipo === 'MIXTO_EF_TR' || tipo === 'MIXTO_TR_CR') && $('#ven_comprobante').val().trim() === "") {
        alert("Escriba el número de referencia de la transferencia."); 
        return false;
    }

    if (doc === 'FACTURA') {
        if ($('#factura_ruc').val().trim() === "" || $('#factura_nombre').val().trim() === "") {
            alert("Por favor complete el RUC y Nombre para emitir la factura.");
            return false;
        }
    }

    if (tipo === 'CREDITO' || tipo === 'MIXTO_EF_CR' || tipo === 'MIXTO_TR_CR' || doc === 'CLIENTE_REGISTRADO') {
        if ($('#bas_id').val() == 0) { 
            alert("Seleccione una alumna o profesor beneficiario."); 
            return false;
        }
    }
    
    return true;
}
</script>