<?php
session_start();
require_once 'includes/funciones_registro.php';

// Obtener el nombre del usuario de la sesión
$nombreUsuario = $_SESSION['usuario'] ?? $_SESSION['nombre'] ?? 'Usuario no identificado';

// Depuración detallada
error_log('SESSION completa: ' . print_r($_SESSION, true));

// Verificar si hay datos de rendición
if (!isset($_SESSION['rendicion_datos'])) {
    header('Location: caja.php');
    exit;
}

$datos = $_SESSION['rendicion_datos'];
$ventasContado = isset($datos['ventas_contado']) ? $datos['ventas_contado'] : 0;

// Asegurar valores por defecto
$defaults = [
    'ingresos' => 0,
    'egresos' => 0,
    'ventas_contado' => 0,
    'entregas_pendientes' => 0,
    'total_esperado' => 0,
    'monto_rendido' => 0,
    'diferencia' => 0
];

// Combinar con valores por defecto
$datos = array_merge($defaults, $datos);

// Procesamiento de valores numéricos mejorado
foreach ($defaults as $campo => $default) {
    if (isset($datos[$campo])) {
        // Convertir a string y limpiar formato
        $valor = (string)$datos[$campo];
        $valor = str_replace([' ', '$', 'PYG', 'Gs.'], '', $valor);
        $valor = str_replace(',', '', $valor);
        $datos[$campo] = (float)$valor;
        
        // Debug de cada campo
        error_log("Campo $campo - Valor original: {$_SESSION['rendicion_datos'][$campo]} - Valor procesado: {$datos[$campo]}");
    }
}

// Calcular el total esperado correctamente
$totalEsperado = $datos['ingresos'] + $datos['ventas_contado'] + $datos['entregas_pendientes'] - $datos['egresos'];
$datos['total_esperado'] = $totalEsperado; // Actualizar el valor en el array de datos

// Debug del cálculo
error_log("Cálculo de total esperado:");
error_log("Ingresos: {$datos['ingresos']}");
error_log("Ventas contado: {$datos['ventas_contado']}");
error_log("Entregas pendientes: {$datos['entregas_pendientes']}");
error_log("Egresos: {$datos['egresos']}");
error_log("Total esperado calculado: {$totalEsperado}");

// Obtener configuración de moneda y decimales
require_once 'includes/config.php';
require_once 'includes/db.php';
$db = new Database();
$pdo = $db->getPDO();
$stmt = $pdo->prepare("SELECT con_decimales, moneda, color_principal, color_secundario, favicon FROM configuracion WHERE id = 1");
$stmt->execute();
$config = $stmt->fetch(PDO::FETCH_ASSOC);

$conDecimales = (int)$config['con_decimales'] ?? 1;
$moneda = $config['moneda'] ?? '$';
$colorPrincipal = $config['color_principal'] ?? '#000000';
$colorSecundario = $config['color_secundario'] ?? '#666666';
$favicon = $config['favicon'] ? 'uploads/config/' . $config['favicon'] : '';

function formatMonto($monto, $conDecimales, $moneda) {
    return $moneda . ' ' . number_format((float)$monto, 0, ',', '.');
}

// Agregar depuración temporal
error_log('Datos de rendición: ' . print_r($datos, true));

// Registrar la actividad de rendición de caja en el historial
$diferencia = $datos['monto_rendido'] - $totalEsperado;
$estadoRendicion = '';

if ($datos['monto_rendido'] == $totalEsperado) {
    $estadoRendicion = "exacta";
} elseif ($datos['monto_rendido'] > $totalEsperado) {
    $estadoRendicion = "sobrante";
} else {
    $estadoRendicion = "faltante";
}

// Crear el detalle para el registro
$detalles = "Rendición de caja - " . 
           "Ingresos: " . formatMonto($datos['ingresos'], $conDecimales, $moneda) . " - " .
           "Ventas contado: " . formatMonto($datos['ventas_contado'], $conDecimales, $moneda) . " - " .
           "Egresos: " . formatMonto($datos['egresos'], $conDecimales, $moneda) . " - " .
           "Total esperado: " . formatMonto($totalEsperado, $conDecimales, $moneda) . " - " .
           "Monto rendido: " . formatMonto($datos['monto_rendido'], $conDecimales, $moneda) . " - ";

if ($estadoRendicion == "exacta") {
    $detalles .= "Cuenta exacta";
} elseif ($estadoRendicion == "sobrante") {
    $detalles .= "Sobrante: " . formatMonto(abs($diferencia), $conDecimales, $moneda);
} else {
    $detalles .= "Faltante: " . formatMonto(abs($diferencia), $conDecimales, $moneda);
}

// Registrar la actividad
if (isset($_SESSION['usuario_id'])) {
    try {
        registrarActividadUsuario(
            $_SESSION['usuario_id'],
            'rendicion_caja',
            $detalles
        );
    } catch (Exception $e) {
        error_log("Error al registrar actividad de rendición de caja: " . $e->getMessage());
    }
}

// Limpiar todas las variables de rendición después de mostrar
function limpiarSesion() {
    unset($_SESSION['rendicion_datos']);
    unset($_SESSION['rendicion_mensaje']);
    unset($_SESSION['rendicion_diferencia']);
    unset($_SESSION['rendicion_tipo']);
    
    // Marcar que la cuenta ya fue rendida
    $_SESSION['cuenta_rendida'] = true;
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<?php
    // Modo oscuro
    require_once 'includes/dark_mode.php';
    ?>
    <meta name="color-scheme" content="light dark">
    <?php echo getDarkModeStyles(); ?>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Resumen de Rendición</title>
    <?php if ($favicon): ?>
    <link rel="icon" type="image/x-icon" href="<?= $favicon ?>">
    <?php endif; ?>
    <link rel="stylesheet" href="admin/css/bootstrap.min.css">
    <style>
        @media print {
            .no-print {
                display: none;
            }
            .container {
                width: 100%;
                max-width: 100%;
                margin: 0;
                padding: 0;
            }
        }
        h1, .strong-text {
            color: <?= $colorPrincipal ?>;
        }
        .card strong {
            color: <?= $colorSecundario ?>;
        }
        .btn-primary {
            background-color: <?= $colorPrincipal ?>;
            border-color: <?= $colorPrincipal ?>;
        }
        .btn-primary:hover {
            background-color: <?= $colorSecundario ?>;
            border-color: <?= $colorSecundario ?>;
        }
    </style>
</head>
<body>
    <div class="container py-4">
        <div class="text-center mb-4">
            <h1>Resumen de Rendición de Caja</h1>
            <p>Fecha: <?= date('d/m/Y H:i', strtotime($datos['fecha'])) ?></p>
            <p>Usuario: <?= htmlspecialchars($nombreUsuario) ?></p>
        </div>

        <div class="card">
            <div class="card-body">
                <div class="row mb-3">
                    <div class="col-6">
                        <p><strong>Ingresos:</strong></p>
                        <p><?= formatMonto($datos['ingresos'], $conDecimales, $moneda) ?></p>
                    </div>
                    <div class="col-6">
                        <p><strong>Egresos:</strong></p>
                        <p><?= formatMonto($datos['egresos'], $conDecimales, $moneda) ?></p>
                    </div>
                </div>
                <div class="row mb-3">
                    <div class="col-6">
                        <p><strong>Ventas al contado:</strong></p>
                        <p><?= formatMonto($datos['ventas_contado'], $conDecimales, $moneda) ?></p>
                    </div>
                    <div class="col-6">
                        <p><strong>Entregas por Cuotas:</strong></p>
                        <p><?= formatMonto($datos['entregas_pendientes'], $conDecimales, $moneda) ?></p>
                    </div>
                </div>
                <hr>
                <div class="row">
                    <div class="col-6">
                        <p><strong>Total esperado:</strong></p>
                        <p><?= formatMonto($totalEsperado, $conDecimales, $moneda) ?></p>
                    </div>
                    <div class="col-6">
                        <p><strong>Monto rendido:</strong></p>
                        <p><?= formatMonto($datos['monto_rendido'], $conDecimales, $moneda) ?></p>
                    </div>
                </div>
                <div class="alert <?= $datos['monto_rendido'] == $totalEsperado ? 'alert-success' : 
                    ($datos['monto_rendido'] > $totalEsperado ? 'alert-info' : 'alert-danger') ?>">
                    <strong>
                        <?php
                        $diferencia = $datos['monto_rendido'] - $totalEsperado;
                        if ($datos['monto_rendido'] == $totalEsperado) {
                            echo "La cuenta está exacta";
                        } elseif ($datos['monto_rendido'] > $totalEsperado) {
                            echo "Sobran " . formatMonto(abs($diferencia), $conDecimales, $moneda);
                            echo " (Diferencia positiva: hay más dinero del esperado)";
                        } else {
                            echo "Faltan " . formatMonto(abs($diferencia), $conDecimales, $moneda);
                            echo " (Diferencia negativa: hay menos dinero del esperado)";
                        }
                        ?>
                    </strong>
                </div>
            </div>
        </div>

        <div class="text-center mt-4 no-print">
            <button onclick="imprimirYCerrar()" class="btn btn-primary me-2">
                <img src="admin/icons/printer.svg" width="16" height="16" alt="Imprimir" class="me-2" style="filter: brightness(0) invert(1);">
                Imprimir
            </button>
            <button onclick="cerrarSesion()" class="btn btn-secondary">
                <img src="admin/icons/x-circle.svg" width="16" height="16" alt="Cerrar" class="me-2" style="filter: brightness(0) invert(1);">
                Cerrar
            </button>
        </div>
    </div>

    <script>
        function imprimirYCerrar() {
            window.print();
            // Llamar a un endpoint PHP para limpiar la sesión
            fetch('limpiar_sesion.php').then(() => {
                setTimeout(function() {
                    window.location.href = 'login.php';
                }, 1000);
            });
        }

        function cerrarSesion() {
            fetch('limpiar_sesion.php').then(() => {
                window.location.href = 'login.php';
            });
        }

        // Evitar el mensaje de reenvío de formulario
        if (window.history.replaceState) {
            window.history.replaceState(null, null, window.location.href);
        }
    </script>
</body>
</html>
