<?php
// vista/caja/gestionar.php
require_once "modelo/Db.php";
$bd = new clsbdd();
$mensaje = "";
$reporte_cierre = null;

// Consultar estado actual antes de procesar para tener los datos de la caja abierta
$caja_actual = $bd->ejecutar_array("SELECT * FROM bas_caja WHERE caj_estado='ABIERTA' ORDER BY caj_codigo DESC LIMIT 1");
$caja_abierta = (is_array($caja_actual) && count($caja_actual) > 0);

// Lógica para procesar la apertura o cierre
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $accion = $_POST['accion'];
    $usu_id = $_SESSION['usu_id'] ?? 1;

    if ($accion == 'APERTURA') {
        $monto = floatval($_POST['monto']);
        $bd->carga_campos("caj_estado, caj_saldo_inicial, usu_id, caj_fecha_apertura");
        $bd->carga_valores("'ABIERTA', $monto, $usu_id, NOW()");
        $bd->insertar("bas_caja");
        
        $mensaje = "
        <div class='alert alert-success border-0 shadow-sm rounded-3 d-flex align-items-center mb-4' role='alert'>
            <i class='fas fa-check-circle fs-4 me-3 text-success'></i>
            <div>
                <h6 class='alert-heading fw-bold mb-1'>Caja Abierta con Éxito</h6>
                <span class='small text-muted'>La caja ha iniciado operaciones con un saldo de: <strong>$" . number_format($monto, 2) . "</strong></span>
            </div>
        </div>";
        
        // Recargar estado de caja
        $caja_actual = $bd->ejecutar_array("SELECT * FROM bas_caja WHERE caj_estado='ABIERTA' ORDER BY caj_codigo DESC LIMIT 1");
        $caja_abierta = (is_array($caja_actual) && count($caja_actual) > 0);
    } elseif ($accion == 'CIERRE' && $caja_abierta) {
        $caj_codigo = $caja_actual[0]['caj_codigo'];
        $fecha_apertura = $caja_actual[0]['caj_fecha_apertura'];
        $saldo_inicial = floatval($caja_actual[0]['caj_saldo_inicial']);

        // Calcular los ingresos desde la fecha de apertura en bas_pagos
        $consulta_ingresos = $bd->ejecutar_array("SELECT SUM(pag_monto) AS total_ventas FROM bas_pagos WHERE pag_fecha >= '$fecha_apertura'");
        $total_ventas = floatval($consulta_ingresos[0]['total_ventas'] ?? 0);
        
        // Calcular saldo final automático
        $saldo_final = $saldo_inicial + $total_ventas;

        // Obtener desglose por métodos de pago para el reporte
        $desglose = $bd->ejecutar_array("SELECT pag_metodo, SUM(pag_monto) AS total_metodo, COUNT(pag_id) AS transacciones FROM bas_pagos WHERE pag_fecha >= '$fecha_apertura' GROUP BY pag_metodo");

        // Actualizar el estado de la caja a CERRADA con los valores calculados del sistema
        $bd->ejecutar("UPDATE bas_caja SET caj_estado='CERRADA', caj_saldo_final=$saldo_final, caj_fecha_cierre=NOW() WHERE caj_codigo=$caj_codigo");

        // Estructurar el reporte de cierre para mostrarlo en pantalla
        $reporte_cierre = [
            'codigo' => $caj_codigo,
            'fecha_apertura' => $fecha_apertura,
            'fecha_cierre' => date("Y-m-d H:i:s"),
            'saldo_inicial' => $saldo_inicial,
            'total_ventas' => $total_ventas,
            'saldo_final' => $saldo_final,
            'desglose' => $desglose
        ];

        $mensaje = "
        <div class='alert alert-warning border-0 shadow-sm rounded-3 d-flex align-items-center mb-4' role='alert'>
            <i class='fas fa-archive fs-4 me-3 text-warning'></i>
            <div>
                <h6 class='alert-heading fw-bold mb-1'>Caja Cerrada Exitosamente</h6>
                <span class='small text-muted'>Caja N° $caj_codigo procesada. El reporte detallado de recaudación ha sido generado abajo.</span>
            </div>
        </div>";
        
        $caja_abierta = false;
    }
}

// Si la caja está abierta, calcular un arqueo/vista previa en tiempo real
$ventas_en_tiempo_real = 0;
$desglose_tiempo_real = [];
if ($caja_abierta) {
    $fecha_apertura_actual = $caja_actual[0]['caj_fecha_apertura'];
    $consulta_tr = $bd->ejecutar_array("SELECT SUM(pag_monto) AS total_ventas FROM bas_pagos WHERE pag_fecha >= '$fecha_apertura_actual'");
    $ventas_en_tiempo_real = floatval($consulta_tr[0]['total_ventas'] ?? 0);
    $desglose_tiempo_real = $bd->ejecutar_array("SELECT pag_metodo, SUM(pag_monto) AS total_metodo FROM bas_pagos WHERE pag_fecha >= '$fecha_apertura_actual' GROUP BY pag_metodo");
}
?>

<div class="row">
    <div class="col-12 col-lg-8 mx-auto">
        
        <div class="d-flex align-items-center justify-content-between mb-4 no-print">
            <div>
                <h4 class="fw-bold mb-1 text-dark">Gestión de Caja</h4>
                <p class="text-muted small mb-0">Control de apertura, arqueos en tiempo real y reportes automáticos de cierre.</p>
            </div>
            <div>
                <i class="fas fa-cash-register fs-3 text-secondary opacity-50"></i>
            </div>
        </div>

        <?= $mensaje ?>

        <div class="no-print mb-4">
            <?php if (!$caja_abierta): ?>
                <div class="card border-0 shadow-sm rounded-3 mb-4 overflow-hidden">
                    <div class="card-header bg-success bg-opacity-10 border-0 py-3">
                        <div class="d-flex align-items-center">
                            <i class="fas fa-door-open text-success fs-5 me-2"></i>
                            <h6 class="card-title fw-bold text-success mb-0">Apertura de Turno / Caja Nueva</h6>
                        </div>
                    </div>
                    <div class="card-body p-4">
                        <p class="text-muted small mb-4">Por favor instancie un nuevo fondo operativo o saldo base con el cual arranca el punto de venta en esta jornada.</p>
                        
                        <form method="post" class="row g-3 align-items-end">
                            <div class="col-12 col-sm-6 col-md-4">
                                <label class="form-label small fw-bold text-secondary">Saldo Inicial ($):</label>
                                <div class="input-group">
                                    <span class="input-group-text bg-light border-end-0"><i class="fas fa-dollar-sign text-muted small"></i></span>
                                    <input type="number" name="monto" step="0.01" value="0.00" min="0" required class="form-control border-start-0 ps-1" placeholder="0.00">
                                </div>
                            </div>
                            <div class="col-12 col-sm-6 col-md-4">
                                <input type="hidden" name="accion" value="APERTURA">
                                <button type="submit" class="btn btn-success fw-bold w-100 py-2 rounded-3 shadow-sm">
                                    <i class="fas fa-check me-2"></i>Abrir Caja
                                </button>
                            </div>
                        </form>
                    </div>
                </div>
            <?php else: ?>
                <div class="card border-0 shadow-sm rounded-3 mb-4 overflow-hidden">
                    <div class="card-header bg-warning bg-opacity-10 border-0 py-3">
                        <div class="d-flex align-items-center justify-content-between">
                            <div class="d-flex align-items-center">
                                <i class="fas fa-lock-open text-warning fs-5 me-2"></i>
                                <h6 class="card-title fw-bold text-warning mb-0">Caja Operativa Activa (Cód: #<?= $caja_actual[0]['caj_codigo'] ?>)</h6>
                            </div>
                            <span class="badge bg-warning text-dark px-3 rounded-pill small fw-bold">ABIERTA</span>
                        </div>
                    </div>
                    
                    <div class="card-body p-4">
                        <div class="row g-4 mb-4">
                            <div class="col-12 col-md-6">
                                <table class="table table-sm table-borderless mb-0 small text-muted">
                                    <tr>
                                        <td class="fw-bold text-dark py-1" style="width:40%;">Apertura:</td>
                                        <td class="py-1"><?= date('d/m/Y H:i', strtotime($caja_actual[0]['caj_fecha_apertura'])) ?></td>
                                    </tr>
                                    <tr>
                                        <td class="fw-bold text-dark py-1">Saldo Base Inicial:</td>
                                        <td class="py-1">$<?= number_format($caja_actual[0]['caj_saldo_inicial'], 2) ?></td>
                                    </tr>
                                    <tr>
                                        <td class="fw-bold text-success py-1">Ventas POS (Sistema):</td>
                                        <td class="py-1 text-success fw-bold">$<?= number_format($ventas_en_tiempo_real, 2) ?></td>
                                    </tr>
                                </table>
                            </div>
                            
                            <div class="col-12 col-md-6 d-flex flex-column justify-content-center bg-light rounded-3 p-3 text-center border border-light">
                                <span class="text-muted small text-uppercase fw-bold mb-1">Saldo Estimado en Caja</span>
                                <h3 class="fw-bold text-dark mb-0">$<?= number_format(floatval($caja_actual[0]['caj_saldo_inicial']) + $ventas_en_tiempo_real, 2) ?></h3>
                            </div>
                        </div>

                        <?php if(count($desglose_tiempo_real) > 0): ?>
                            <div class="p-3 bg-light rounded-3 border border-light mb-4">
                                <h6 class="fw-bold text-secondary small text-uppercase mb-3"><i class="fas fa-list-alt me-2"></i>Pre-arqueo por Métodos de Pago:</h6>
                                <div class="row g-2">
                                    <?php foreach($desglose_tiempo_real as $d_tr): ?>
                                        <div class="col-6 col-sm-4">
                                            <div class="bg-white p-2 rounded-2 shadow-xs border">
                                                <div class="text-muted text-xs text-truncate mb-1 fw-medium"><?= htmlspecialchars($d_tr['pag_metodo']) ?></div>
                                                <div class="fw-bold text-dark small">$<?= number_format($d_tr['total_metodo'], 2) ?></div>
                                            </div>
                                        </div>
                                    <?php endforeach; ?>
                                </div>
                            </div>
                        <?php endif; ?>

                        <form method="post" onsubmit="return confirm('¿Está seguro de que desea cerrar la caja? Los balances finales se calcularán automáticamente basándose en los ingresos reales ingresados.');">
                            <input type="hidden" name="accion" value="CIERRE">
                            <button type="submit" class="btn btn-danger fw-bold px-4 py-2 rounded-3 shadow-sm">
                                <i class="fas fa-power-off me-2"></i>Cerrar Caja Automáticamente
                            </button>
                        </form>
                    </div>
                </div>
            <?php endif; ?>
        </div>

        <?php if ($reporte_cierre !== null): ?>
            <div id="reporteCierreImpresion" class="card border border-secondary border-opacity-25 rounded-3 shadow-sm bg-white overflow-hidden p-2 m-0">
                <div class="card-body p-4">
                    
                    <div class="text-center mb-4">
                        <h5 class="fw-bold mb-1 text-dark text-uppercase tracking-wide">STAGE DANCE</h5>
                        <h6 class="fw-bold text-muted mb-2 small text-uppercase tracking-wider">Reporte de Cierre de Caja</h6>
                        <span class="badge bg-dark px-3 rounded-1 font-monospace small">ID CAJA: #<?= $reporte_cierre['codigo'] ?></span>
                    </div>

                    <div class="border-top border-bottom border-dashed py-2 my-3 font-monospace small">
                        <div class="d-flex justify-content-between mb-1">
                            <span class="text-muted">Apertura:</span>
                            <span class="text-dark fw-bold"><?= date('d/m/Y H:i:s', strtotime($reporte_cierre['fecha_apertura'])) ?></span>
                        </div>
                        <div class="d-flex justify-content-between mb-1">
                            <span class="text-muted">Cierre:</span>
                            <span class="text-dark fw-bold"><?= date('d/m/Y H:i:s', strtotime($reporte_cierre['fecha_cierre'])) ?></span>
                        </div>
                        <div class="d-flex justify-content-between">
                            <span class="text-muted">Usuario Responsable:</span>
                            <span class="text-dark fw-bold">ID: <?= $usu_id ?></span>
                        </div>
                    </div>

                    <div class="bg-light rounded-3 p-3 my-3">
                        <div class="d-flex justify-content-between align-items-center mb-2 small text-muted">
                            <span>(+) Saldo Inicial Apertura:</span>
                            <span class="fw-semibold text-dark">$<?= number_format($reporte_cierre['saldo_inicial'], 2) ?></span>
                        </div>
                        <div class="d-flex justify-content-between align-items-center pb-2 border-bottom border-secondary border-opacity-10 mb-2 small text-muted">
                            <span>(+) Total Ventas POS:</span>
                            <span class="fw-semibold text-success font-monospace fw-bold">+$<?= number_format($reporte_cierre['total_ventas'], 2) ?></span>
                        </div>
                        <div class="d-flex justify-content-between align-items-center pt-1">
                            <span class="fw-bold text-dark small text-uppercase">Saldo Final Neto:</span>
                            <h4 class="fw-bold text-dark mb-0 font-monospace">$<?= number_format($reporte_cierre['saldo_final'], 2) ?></h4>
                        </div>
                    </div>

                    <h6 class="fw-bold text-dark text-uppercase small tracking-wider mb-2 mt-4 pb-1 border-bottom"><i class="fas fa-coins text-secondary me-2"></i>Recaudación por Formas de Pago</h6>
                    
                    <?php if(is_array($reporte_cierre['desglose']) && count($reporte_cierre['desglose']) > 0): ?>
                        <div class="table-responsive">
                            <table class="table table-sm table-hover align-middle mb-0 font-monospace small">
                                <thead class="table-light text-secondary">
                                    <tr>
                                        <th class="py-2 border-0">Método de Pago</th>
                                        <th class="py-2 border-0 text-center">Transacciones</th>
                                        <th class="py-2 border-0 text-end">Subtotal</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php foreach($reporte_cierre['desglose'] as $linea): ?>
                                        <tr>
                                            <td class="py-2 fw-medium text-dark"><?= htmlspecialchars($linea['pag_metodo']) ?></td>
                                            <td class="py-2 text-center text-muted"><?= $linea['transacciones'] ?></td>
                                            <td class="py-2 text-end fw-bold text-dark">$<?= number_format($linea['total_metodo'], 2) ?></td>
                                        </tr>
                                    <?php endforeach; ?>
                                </tbody>
                            </table>
                        </div>
                    <?php else: ?>
                        <div class="text-center py-3 text-muted small border rounded-3 bg-light bg-opacity-50">
                            <i class="fas fa-info-circle me-1 opacity-50"></i> No se procesaron pagos ni movimientos en el transcurso de este bloque abierto.
                        </div>
                    <?php endif; ?>

                    <div class="row mt-5 pt-3 g-4" style="margin-top: 60px !important;">
                        <div class="col-6 text-center">
                            <div class="mx-auto border-top border-dark border-opacity-50 pt-2 small text-muted text-uppercase" style="width: 80%; font-size:11px;">
                                Firma Responsable<br><strong class="text-dark">Cajero / POS</strong>
                            </div>
                        </div>
                        <div class="col-6 text-center">
                            <div class="mx-auto border-top border-dark border-opacity-50 pt-2 small text-muted text-uppercase" style="width: 80%; font-size:11px;">
                                Firma Control<br><strong class="text-dark">Auditoría Interna</strong>
                            </div>
                        </div>
                    </div>

                    <div class="text-center mt-5 no-print">
                        <button onclick="window.print();" class="btn btn-dark fw-bold px-4 rounded-3 shadow-sm">
                            <i class="fas fa-print me-2"></i>Imprimir Reporte de Caja
                        </button>
                    </div>

                </div>
            </div>
        <?php endif; ?>

    </div>
</div>

<style>
.text-xs { font-size: 0.75rem !important; }
.border-dashed { border-style: dashed !important; }
.shadow-xs { box-shadow: 0 1px 2px rgba(0,0,0,0.05); }

@media print {
    body * {
        visibility: hidden !important;
    }
    #reporteCierreImpresion, #reporteCierreImpresion * {
        visibility: visible !important;
    }
    #reporteCierreImpresion {
        position: absolute !important;
        left: 0 !important;
        top: 0 !important;
        width: 100% !important;
        border: none !important;
        box-shadow: none !important;
    }
    .no-print {
        display: none !important;
        height: 0 !important;
        margin: 0 !important;
        padding: 0 !important;
    }
}
</style>