<?php
include('is_logged.php');
require_once ("../config/db.php");
require_once ("../config/conexion.php");

// 1. Obtener la tasa con seguridad
$query_tasa = mysqli_query($con, "SELECT * FROM tasa WHERE id_tasa='1'");
$tasa_actual = 0;
if ($row = mysqli_fetch_array($query_tasa)) {
    $tasa_actual = (float)$row['tasa'];
}

$id_factura = $_SESSION['id_factura'];
$numero_factura = $_SESSION['numero_factura'];
$date_added = date("Y-m-d H:i:s");

// 2. Obtener el total de la venta
$sql_precio = mysqli_query($con, "SELECT * FROM facturas WHERE id_factura='" . $id_factura . "'");
$rw_precio = mysqli_fetch_array($sql_precio);
$total_venta_db = (float)$rw_precio['total_venta'];
$total = $total_venta_db * $tasa_actual; // Esta es la línea 41 aproximada

$sWhere = "";

// 3. Lógica de Donación
if (isset($_POST['donar'])) {
    $estado_factura = 2;
    $donar = "Donacion";
    $sWhere = "condiciones='".$donar."', estado_factura='" . $estado_factura . "' WHERE id_factura='" . $id_factura . "'";
} 

// 4. Lógica de Pago (Casting a float para evitar el Fatal Error)
if (isset($_POST['fecha_pago']) && !isset($_POST['donar'])) {
    // Convertimos todo a float y si está vacío lo tratamos como 0
    $condiciones_efe  = (float)($_POST['condiciones_efe'] ?: 0);
    $condiciones_efed = (float)($_POST['condiciones_efed'] ?: 0);
    $condiciones_tra  = (float)($_POST['condiciones_tra'] ?: 0);
    $condiciones_pun  = (float)($_POST['condiciones_pun'] ?: 0);
    $condiciones_ret  = (float)($_POST['condiciones_ret'] ?: 0);
    
    $banco      = intval($_POST['banco']);
    $ref        = $_POST['ref']; 
    $fecha_pago = $_POST['fecha_pago'];

    // Cálculo del monto pagado convertido a la moneda local
    $pagado = $condiciones_efe + ($condiciones_efed * $tasa_actual) + $condiciones_tra + $condiciones_pun + $condiciones_ret;

    if ($pagado < $total-0.05) {
        echo "<script>alert('Monto cancelado (" . number_format($pagado, 2) . ") es menor al total (" . number_format($total, 2) . ").'); history.back();</script>";
        exit;
    } else {
        $estado_factura = 2;
        $vuelto = $pagado - $total;
        
        // Si hay vuelto, se lo restamos al efectivo en BsD
        if ($vuelto > 0.05) {
            $condiciones_efe = $condiciones_efe - $vuelto;
            echo "<script>alert('Pago procesado. Vuelto: " . number_format($vuelto, 2) . " BsD');</script>";
        }

        $sWhere = "condiciones_efe='$condiciones_efe', condiciones_efed='$condiciones_efed', condiciones_tra='$condiciones_tra', condiciones_ret='$condiciones_ret', condiciones_pun='$condiciones_pun', estado_factura='$estado_factura', fecha_pago='$fecha_pago', banco='$banco', ref='$ref' WHERE id_factura='$id_factura'";
    }
}

// 5. Ejecutar actualización
if (!empty($sWhere)) {
    $sql = "UPDATE facturas SET $sWhere";
    $query_update = mysqli_query($con, $sql);

    if ($query_update) {
        echo "<script>alert('Operación Exitosa.'); window.location='facturas.php';</script>";
    } else {
        echo "<div class='alert alert-danger'>Error en la base de datos: " . mysqli_error($con) . "</div>";
    }
}
?>