<?php
/**
 * VVault - Procesador de Depósitos (Simulado)
 * Versión: 3.0 Ledger-Based
 */
require '../config/db.php';

// 1. SEGURIDAD DE SESIÓN
if (!isset($_SESSION['user_id'])) { 
    exit("Unauthorized access"); 
}

// 2. CAPTURA DE DATOS (Soporta GET para tu prompt actual, pero POST es recomendado)
$amount = filter_input(INPUT_GET, 'amount', FILTER_VALIDATE_FLOAT);
$method = htmlspecialchars($_GET['method'] ?? 'Unknown');
$user_id = $_SESSION['user_id'];

// 3. VALIDACIONES BÁSICAS
if ($amount === false || $amount <= 0) { 
    die("Invalid deposit amount."); 
}

// Limitar a 2 decimales para evitar errores de redondeo en el Ledger
$amount = round($amount, 2);

try {
    /**
     * INICIO DE TRANSACCIÓN ACID
     * Aquí no actualizamos 'users', solo insertamos el registro de confianza.
     */
    $pdo->beginTransaction();

    /**
     * REGISTRO CONTABLE (PARTIDA DOBLE): CRÉDITO
     * Un depósito es un 'credit' porque aumenta el saldo disponible del usuario.
     */
    $stmt_ledger = $pdo->prepare("
        INSERT INTO ledger (
            user_id, 
            amount, 
            entry_type, 
            category, 
            description
        ) VALUES (?, ?, 'credit', 'deposit', ?)
    ");

    $description = "Funds added via $method (Verified Transaction)";
    
    $stmt_ledger->execute([
        $user_id, 
        $amount, 
        $description
    ]);

    /**
     * 4. REGISTRO DE AUDITORÍA ADICIONAL (Opcional)
     * Si quieres mantener la tabla 'transactions' antigua por ahora, 
     * puedes seguir insertando allí, pero el Ledger es el que manda.
     */
    // $pdo->prepare("INSERT INTO transactions...")->execute(...);

    // TODO CORRECTO: Confirmamos la entrada de dinero
    $pdo->commit();
    
    // Redirección al balance con éxito
    header("Location: ../balance.php?success=1&amt=" . $amount);
    exit;

} catch (Exception $e) {
    // Si el servidor falla o la DB se cae, no se acredita nada.
    if ($pdo->inTransaction()) {
        $pdo->rollBack();
    }
    
    error_log("Deposit Error: " . $e->getMessage());
    die("Critical Error: The deposit could not be processed.");
}