<?php
if (session_status() === PHP_SESSION_NONE) { session_start(); }
require_once "modelo/Db.php";
$bd = new clsbdd();

$usu_codigo = $_SESSION['usu_codigo'] ?? 0;
if (!$usu_codigo) { header("Location: sba_login.php"); exit; }

// Verificación de rol
$datos_usuario = $bd->ejecutar_array("SELECT usu_rol FROM sba_usuarios WHERE usu_codigo = $usu_codigo");
$mi_rol = strtolower(trim($datos_usuario[0]['usu_rol'] ?? ''));
$es_admin = (strpos($mi_rol, 'admi') !== false); 

function obtener_caja_actual($bd) {
    $res = $bd->ejecutar_array("SELECT * FROM sba_caja WHERE caj_estado='ABIERTA' LIMIT 1");
    return $res[0] ?? null;
}

/**
 * REVISIÓN DE TOTALES DETALLADA:
 * CORRECCIÓN: Se agregó la lógica para que MIXTO_TR_CR sume a Transferencia y Crédito correctamente.
 */
function refrescar_totales_detallados($bd, $caj_codigo) {
    $res = $bd->ejecutar_array("
        SELECT 
            -- EFECTIVO
            COALESCE(SUM(CASE WHEN ven_tipo_pago = 'EFECTIVO' THEN ven_total ELSE 0 END), 0) as efec_puro,
            COALESCE(SUM(CASE WHEN ven_tipo_pago IN ('MIXTO_EF_TR', 'MIXTO_EF_CR') THEN ven_entregado ELSE 0 END), 0) as efec_mixto,
            
            -- TRANSFERENCIA (CORREGIDO)
            COALESCE(SUM(CASE WHEN ven_tipo_pago = 'TRANSFERENCIA' THEN ven_total ELSE 0 END), 0) as tr_puro,
            COALESCE(SUM(CASE WHEN ven_tipo_pago = 'MIXTO_EF_TR' THEN (ven_total - ven_entregado) ELSE 0 END), 0) as tr_mixto_ef,
            -- En MIXTO_TR_CR, ven_entregado es el monto de la transferencia
            COALESCE(SUM(CASE WHEN ven_tipo_pago = 'MIXTO_TR_CR' THEN ven_entregado ELSE 0 END), 0) as tr_mixto_cr,

            -- CRÉDITO (CORREGIDO)
            COALESCE(SUM(CASE WHEN ven_tipo_pago = 'CREDITO' THEN ven_total ELSE 0 END), 0) as cr_puro,
            -- En MIXTO_TR_CR, el crédito es la diferencia (Total - Transferencia)
            COALESCE(SUM(CASE WHEN ven_tipo_pago IN ('MIXTO_EF_CR', 'MIXTO_TR_CR') THEN (ven_total - ven_entregado) ELSE 0 END), 0) as cr_mixto,

            -- OTROS (Para arqueo físico en gaveta solo entra EFECTIVO)
            COALESCE(SUM(CASE WHEN ven_tipo_pago IN ('EFECTIVO', 'MIXTO_EF_TR', 'MIXTO_EF_CR') THEN ven_entregado ELSE 0 END), 0) as total_received,
            COALESCE(SUM(CASE WHEN ven_tipo_pago IN ('EFECTIVO', 'MIXTO_EF_TR', 'MIXTO_EF_CR') THEN ven_vuelto ELSE 0 END), 0) as total_vueltos
        FROM sba_ventas
        WHERE caj_codigo=$caj_codigo AND ven_estado=1
    ");
    
    // Mapeo manual para no romper variables existentes en el HTML
    $row = $res[0];
    $row['total_recibido'] = $row['total_received']; 
    return $row;
}

$mensaje_swal = "";
$id_reporte_z = 0;

// --- PROCESO: ANULAR VENTA (Solo Admin) ---
if (isset($_POST['btn_eliminar_venta']) && $es_admin) {
    $id_ven = intval($_POST['id_venta']);
    $v_info = $bd->ejecutar_array("SELECT v.*, u.usu_nombre FROM sba_ventas v INNER JOIN sba_usuarios u ON u.usu_codigo = $usu_codigo WHERE v.ven_codigo = $id_ven");

    if ($v_info) {
        $v = $v_info[0];
        $monto_total = $v['ven_total'];
        $tipo_pago = $v['ven_tipo_pago'];
        $pro_codigo = $v['pro_codigo'];
        $nombre_usuario = $v['usu_nombre'];

        $monto_a_devolver = 0;
        if ($tipo_pago == 'CREDITO') $monto_a_devolver = $monto_total;
        if ($tipo_pago == 'MIXTO_EF_CR' || $tipo_pago == 'MIXTO_TR_CR') $monto_a_devolver = ($v['ven_total'] - $v['ven_entregado']);

        if ($monto_a_devolver > 0 && !empty($pro_codigo)) {
            $bd->ejecutar("UPDATE sba_profesores SET pro_saldo_actual = pro_saldo_actual - $monto_a_devolver WHERE pro_codigo = $pro_codigo");
        }

        $detalles = $bd->ejecutar_array("SELECT prd_codigo, vde_cantidad FROM sba_ventas_detalle WHERE ven_codigo = $id_ven");
        if ($detalles) {
            foreach ($detalles as $d) {
                $bd->ejecutar("UPDATE sba_productos SET prd_stock = prd_stock + {$d['vde_cantidad']} WHERE prd_codigo = {$d['prd_codigo']}");
            }
        }

        $bd->ejecutar("UPDATE sba_ventas SET ven_estado = 0 WHERE ven_codigo = $id_ven");
        $bd->ejecutar("INSERT INTO sba_auditoria (usu_nombre, aud_tabla_afectada, aud_accion, aud_fecha) VALUES ('$nombre_usuario', 'sba_ventas', 'Anuló venta #$id_ven por $$monto_total', NOW())");
        
        echo "<script>window.location.href='index.php?page=caja&msj=anulada';</script>";
        exit;
    }
}

// PROCESOS: Abrir, Modificar y Cerrar Caja
if (isset($_POST['btn_abrir']) && $es_admin) {
    $monto = floatval($_POST['monto_inicial']);
    $bd->ejecutar("INSERT INTO sba_caja (usu_codigo, caj_fecha_apertura, caj_monto_inicial, caj_estado) VALUES ($usu_codigo, NOW(), $monto, 'ABIERTA')");
    $mensaje_swal = "abierta";
}
if (isset($_POST['btn_modificar_apertura']) && $es_admin) {
    $nuevo_monto = floatval($_POST['nuevo_monto_inicial']);
    $id_caja_mod = intval($_POST['id_caja_mod']);
    $bd->ejecutar("UPDATE sba_caja SET caj_monto_inicial = $nuevo_monto WHERE caj_codigo = $id_caja_mod");
    $mensaje_swal = "modificada";
}
if (isset($_POST['btn_cerrar']) && $es_admin) {
    $id_para_reporte = intval($_POST['id_caja_cierre']);
    $bd->ejecutar("UPDATE sba_caja SET caj_fecha_cierre=NOW(), caj_estado='CERRADA' WHERE caj_codigo=$id_para_reporte");
    $mensaje_swal = "cerrada";
    $id_reporte_z = $id_para_reporte;
}

$caja = obtener_caja_actual($bd);
?>

<style>
    .caja-container { background: #f8f9fa; padding: 20px; border-radius: 10px; border: 1px solid #ddd; }
    .header-caja { display: flex; justify-content: space-between; align-items: center; margin-bottom: 25px; }
    .stats-caja { display: flex; flex-wrap: wrap; gap: 15px; margin-bottom: 25px; }
    .stat-card { flex: 1; min-width: 170px; padding: 20px; border-radius: 10px; color: white; position: relative; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }
    .stat-card small { display: block; font-size: 11px; text-transform: uppercase; font-weight: bold; opacity: 0.9; }
    .stat-card b { font-size: 24px; display: block; margin-top: 5px; }
    .btn-edit-apertura { position: absolute; top: 8px; right: 8px; background: #FFD700; color: #000; width: 25px; height: 25px; text-align: center; border-radius: 50%; cursor: pointer; font-size: 12px; line-height: 25px; z-index: 10; }
    
    .info-icon { position: absolute; top: 10px; right: 10px; color: rgba(255,255,255,0.7); cursor: help; font-size: 16px; }
    .info-icon:hover .tooltip-detalle { display: block; }
    .tooltip-detalle { display: none; position: absolute; top: 30px; right: 0; background: #222; color: #fff; padding: 12px; border-radius: 8px; width: 200px; font-size: 12px; z-index: 1000; box-shadow: 0 8px 16px rgba(0,0,0,0.4); border: 1px solid #444; }
    .tooltip-detalle div { display: flex; justify-content: space-between; margin-bottom: 4px; }
    .tooltip-detalle hr { border: 0; border-top: 1px solid #444; margin: 8px 0; }

    .bg-info-dark { background: #5d87ff; }
    .bg-success-dark { background: #00d084; }
    .bg-danger-dark { background: #fa5a5a; }
    .bg-navy { background: #2d3e50; }
    .bg-purple { background: #6f86f7; }
    .bg-warning-dark { background: #f6c23e; color: #fff !important; }
    .panel-ventas { background: white; border-radius: 10px; padding: 20px; border: 1px solid #dee2e6; }
    .table-responsive-scroll { max-height: 500px; overflow-y: auto; }
    .btn-pos { padding: 10px 18px; border-radius: 6px; border: none; font-weight: bold; cursor: pointer; text-decoration: none; font-size: 14px; color:white; }
</style>

<div class="caja-container">
    <div class="header-caja">
        <div>
            <h2 style="margin:0; color:#4e73df;"><i class="fa fa-cash-register"></i> Control de Caja</h2>
            <small class="text-muted">Estado actual: <b><?= $caja ? 'ABIERTA' : 'CERRADA' ?></b> | Rol: <?= strtoupper($mi_rol) ?></small>
        </div>
        <div><a href="index.php?page=ventas" class="btn-pos" style="background:#4e73df;">Ir a Ventas</a></div>
    </div>

    <?php if (!$caja): ?>
        <div style="max-width:400px; margin:60px auto; text-align:center; background:white; padding:40px; border-radius:15px; border:1px solid #ddd;">
            <i class="fa fa-lock fa-3x" style="color:#d1d3e2; margin-bottom:15px;"></i>
            <h3>Turno Cerrado</h3>
            <?php if ($es_admin): ?>
                <form method="post">
                    <label>Monto Inicial en Efectivo:</label>
                    <input type="number" name="monto_inicial" step="0.01" style="width:100%; font-size:28px; text-align:center; margin:20px 0; padding:10px; border:2px solid #eaecf4; border-radius:10px;" value="0.00" required>
                    <button type="submit" name="btn_abrir" class="btn-pos" style="background:#1cc88a; width:100%; font-size:16px;">ABRIR CAJA</button>
                </form>
            <?php else: ?>
                <p class="text-danger">Solo el administrador puede abrir el turno.</p>
            <?php endif; ?>
        </div>
    <?php else: ?>
        <?php
            $d = refrescar_totales_detallados($bd, $caja['caj_codigo']);
            $total_tr = $d['tr_puro'] + $d['tr_mixto_ef'] + $d['tr_mixto_cr'];
            $total_ef_recibido = $d['efec_puro'] + $d['efec_mixto'];
            $total_cr = $d['cr_puro'] + $d['cr_mixto'];
            $total_gaveta = $caja['caj_monto_inicial'] + ($d['total_recibido'] - $d['total_vueltos']);
        ?>
        <div class="stats-caja">
            <div class="stat-card bg-info-dark">
                <small>CAJA INICIAL</small>
                <?php if ($es_admin): ?>
                    <div class="btn-edit-apertura" onclick="modificarApertura(<?= $caja['caj_monto_inicial'] ?>)"><i class="fa fa-pencil-alt"></i></div>
                <?php endif; ?>
                <b>$<?= number_format($caja['caj_monto_inicial'], 2) ?></b>
            </div>

            <div class="stat-card" style="background: #008080;">
                <small>TRANSFERENCIAS</small>
                <b>$<?= number_format($total_tr, 2) ?></b>
                <div class="info-icon"><i class="fa fa-info-circle"></i>
                    <div class="tooltip-detalle">
                        <div><span>Ventas 100% TR:</span> <span>$<?= number_format($d['tr_puro'], 2) ?></span></div>
                        <div><span>Parte TR (Mixto EF):</span> <span>$<?= number_format($d['tr_mixto_ef'], 2) ?></span></div>
                        <div><span>Parte TR (Mixto CR):</span> <span>$<?= number_format($d['tr_mixto_cr'], 2) ?></span></div>
                        <hr>
                        <div style="font-weight:bold;"><span>Total:</span> <span>$<?= number_format($total_tr, 2) ?></span></div>
                    </div>
                </div>
            </div>

            <div class="stat-card bg-navy">
                <small>EFEC. RECIBIDO</small>
                <b>$<?= number_format($total_ef_recibido, 2) ?></b>
                <div class="info-icon"><i class="fa fa-info-circle"></i>
                    <div class="tooltip-detalle">
                        <div><span>Ventas 100% EF:</span> <span>$<?= number_format($d['efec_puro'], 2) ?></span></div>
                        <div><span>Parte EF (Mixtos):</span> <span>$<?= number_format($d['efec_mixto'], 2) ?></span></div>
                        <hr>
                        <div style="font-weight:bold;"><span>Total EF:</span> <span>$<?= number_format($total_ef_recibido, 2) ?></span></div>
                    </div>
                </div>
            </div>

            <div class="stat-card bg-danger-dark">
                <small>VUELTOS (-)</small>
                <b>$<?= number_format($d['total_vueltos'], 2) ?></b>
            </div>

            <div class="stat-card bg-warning-dark">
                <small>VENTAS CRÉDITO</small>
                <b>$<?= number_format($total_cr, 2) ?></b>
                <div class="info-icon"><i class="fa fa-info-circle"></i>
                    <div class="tooltip-detalle">
                        <div><span>Ventas 100% CR:</span> <span>$<?= number_format($d['cr_puro'], 2) ?></span></div>
                        <div><span>Parte CR (Mixtos):</span> <span>$<?= number_format($d['cr_mixto'], 2) ?></span></div>
                        <hr>
                        <div style="font-weight:bold;"><span>Total CR:</span> <span>$<?= number_format($total_cr, 2) ?></span></div>
                    </div>
                </div>
            </div>

            <div class="stat-card bg-purple">
                <small>TOTAL EN GAVETA</small>
                <b>$<?= number_format($total_gaveta, 2) ?></b>
                <div class="info-icon"><i class="fa fa-info-circle"></i>
                    <div class="tooltip-detalle">
                        <div><span>Monto Inicial:</span> <span>$<?= number_format($caja['caj_monto_inicial'], 2) ?></span></div>
                        <div><span>+ Efec. Recibido:</span> <span>$<?= number_format($d['total_recibido'], 2) ?></span></div>
                        <div><span>- Vueltos:</span> <span>$<?= number_format($d['total_vueltos'], 2) ?></span></div>
                        <hr>
                        <div style="font-weight:bold;"><span>En Gaveta:</span> <span>$<?= number_format($total_gaveta, 2) ?></span></div>
                    </div>
                </div>
            </div>
        </div>

        <div class="panel-ventas">
            <div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:20px;">
                <h4 style="margin:0;"><i class="fa fa-history"></i> Movimientos del Turno</h4>
                <?php if ($es_admin): ?>
                    <form method="post" onsubmit="return confirm('¿Seguro que desea cerrar caja?')">
                        <input type="hidden" name="id_caja_cierre" value="<?= $caja['caj_codigo'] ?>">
                        <button type="submit" name="btn_cerrar" class="btn-pos" style="background:#e74a3b;"><i class="fa fa-power-off"></i> CERRAR CAJA</button>
                    </form>
                <?php endif; ?>
            </div>

            <div class="table-responsive-scroll">
                <table style="width:100%; border-collapse:collapse; font-size:14px;">
                    <thead>
                        <tr style="background:#f8f9fa; text-align:left; border-bottom:2px solid #eee;">
                            <th style="padding:12px;">Ticket</th>
                            <th style="padding:12px;">Hora</th>
                            <th style="padding:12px;">Tipo Pago</th>
                            <th style="padding:12px;">Cliente</th>
                            <th style="padding:12px;">Total</th>
                            <th style="padding:12px; text-align:center;">Acciones</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php 
                            $sql_mov = "SELECT v.*, p.pro_nombre FROM sba_ventas v LEFT JOIN sba_profesores p ON v.pro_codigo = p.pro_codigo WHERE v.caj_codigo={$caja['caj_codigo']} AND v.ven_estado=1 ORDER BY v.ven_codigo DESC";
                            $ventas = $bd->ejecutar_array($sql_mov);
                            if($ventas): foreach($ventas as $v): 
                                $tp = $v['ven_tipo_pago'];
                                $bg = ($tp == 'CREDITO') ? "#fff3e0" : (($tp == 'EFECTIVO') ? "#e1f5fe" : "#e8f5e9");
                                $txt = ($tp == 'CREDITO') ? "#e65100" : (($tp == 'EFECTIVO') ? "#01579b" : "#1b5e20");
                        ?>
                            <tr style="border-bottom:1px solid #eee;">
                                <td style="padding:10px;">#<?= $v['ven_codigo'] ?></td>
                                <td style="padding:10px;"><?= date('H:i', strtotime($v['ven_fecha'])) ?></td>
                                <td style="padding:10px;"><span style="background:<?= $bg ?>; color:<?= $txt ?>; padding:4px 8px; border-radius:10px; font-size:11px; font-weight:bold;"><?= $tp ?></span></td>
                                <td style="padding:10px;"><?= $v['pro_nombre'] ?: 'Consumidor Final' ?></td>
                                <td style="padding:10px; font-weight:bold;">$<?= number_format($v['ven_total'], 2) ?></td>
                                <td style="padding:10px; text-align:center;">
                                    <button onclick="window.open('vista/ticket.php?id=<?= $v['ven_codigo'] ?>','','width=400,height=600')" style="border:none; background:none; color:#4e73df; cursor:pointer; margin-right:10px;"><i class="fa fa-print"></i></button>
                                    <?php if ($es_admin): ?>
                                        <button onclick="eliminarVenta(<?= $v['ven_codigo'] ?>)" style="border:none; background:none; color:#e74a3b; cursor:pointer;"><i class="fa fa-trash-alt"></i></button>
                                    <?php endif; ?>
                                </td>
                            </tr>
                        <?php endforeach; else: ?>
                            <tr><td colspan="6" style="padding:20px; text-align:center; color:#999;">No hay movimientos en este turno.</td></tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    <?php endif; ?>
</div>

<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
    function eliminarVenta(id) {
        Swal.fire({
            title: '¿Anular Venta #' + id + '?',
            text: "Se devolverá el stock y el saldo al profesor. ¡No se puede deshacer!",
            icon: 'warning',
            showCancelButton: true,
            confirmButtonColor: '#e74a3b',
            confirmButtonText: 'Sí, anular',
            cancelButtonText: 'Cancelar'
        }).then((result) => {
            if (result.isConfirmed) {
                const f = document.createElement('form');
                f.method = 'POST';
                f.innerHTML = `<input type="hidden" name="btn_eliminar_venta" value="1"><input type="hidden" name="id_venta" value="${id}">`;
                document.body.appendChild(f);
                f.submit();
            }
        })
    }

    function modificarApertura(monto) {
        Swal.fire({
            title: 'Corregir Monto Inicial',
            input: 'number',
            inputAttributes: { step: '0.01' },
            inputValue: monto,
            showCancelButton: true,
            confirmButtonText: 'Guardar'
        }).then((res) => {
            if (res.isConfirmed) {
                const f = document.createElement('form');
                f.method = 'POST';
                f.innerHTML = `<input type="hidden" name="btn_modificar_apertura" value="1"><input type="hidden" name="id_caja_mod" value="<?= $caja['caj_codigo'] ?? 0 ?>"><input type="hidden" name="nuevo_monto_inicial" value="${res.value}">`;
                document.body.appendChild(f);
                f.submit();
            }
        });
    }

    <?php if(isset($_GET['msj']) && $_GET['msj'] == "anulada"): ?>
        Swal.fire('Anulada', 'Venta eliminada y saldo corregido.', 'success');
    <?php endif; ?>

    <?php if($mensaje_swal == "cerrada"): ?>
        Swal.fire({ icon: 'success', title: 'Caja Cerrada', timer: 2000, showConfirmButton: false })
        .then(() => {
            window.open('vista/ticket_cierre.php?id=<?= $id_reporte_z ?>','','width=800,height=900');
            location.href = "index.php?page=caja";
        });
    <?php elseif($mensaje_swal == "abierta"): ?>
        Swal.fire({ icon: 'success', title: 'Caja Abierta', timer: 1500, showConfirmButton: false });
    <?php elseif($mensaje_swal == "modificada"): ?>
        Swal.fire({ icon: 'success', title: 'Apertura Corregida', timer: 1500, showConfirmButton: false });
    <?php endif; ?>
</script>