<?php
/*-----------------------
Autor: Delmar Lopez
http://www.softwys.com
Fecha: 03-01-2018
Version de PHP: 7.0.0
----------------------------*/
include 'is_logged.php'; //Verifica que el usuario esté logueado
require_once "../db.php";
require_once "../php_conexion.php";

/* Validación */
if (empty($_POST['id_factura'])) {
    $errors[] = "ID vacío.";
} else {
    $id_factura = intval($_POST['id_factura']);
    
    // Iniciar transacción para asegurar integridad de datos
    mysqli_begin_transaction($conexion);
    
    try {
        // 1. Primero obtener todos los productos y cantidades del detalle de compra
        $query_detalle = "SELECT id_producto, cantidad FROM detalle_fact_compra WHERE id_factura='$id_factura'";
        $result_detalle = mysqli_query($conexion, $query_detalle);
        
        if ($result_detalle && mysqli_num_rows($result_detalle) > 0) {
            // 2. Recorrer cada producto y RESTAR la cantidad del stock (porque es una compra)
            while ($row = mysqli_fetch_assoc($result_detalle)) {
                $id_producto = intval($row['id_producto']);
                $cantidad = floatval($row['cantidad']);
                
                // Verificar que hay suficiente stock para restar
                $query_check_stock = "SELECT stock_producto FROM productos WHERE id_producto = $id_producto";
                $result_check = mysqli_query($conexion, $query_check_stock);
                $stock_actual = 0;
                
                if ($result_check && mysqli_num_rows($result_check) > 0) {
                    $row_stock = mysqli_fetch_assoc($result_check);
                    $stock_actual = floatval($row_stock['stock_producto']);
                }
                
                // Actualizar stock del producto RESTANDO la cantidad (porque es una compra eliminada)
                if ($stock_actual >= $cantidad) {
                    $update_stock = "UPDATE productos 
                                    SET stock_producto = stock_producto - $cantidad 
                                    WHERE id_producto = $id_producto";
                    mysqli_query($conexion, $update_stock);
                } else {
                    // Si no hay suficiente stock, establecer stock a 0 (evitar valores negativos)
                    $update_stock = "UPDATE productos 
                                    SET stock_producto = 0 
                                    WHERE id_producto = $id_producto";
                    mysqli_query($conexion, $update_stock);
                }
                
                // Verificar si hubo error en la actualización
                if (mysqli_error($conexion)) {
                    throw new Exception("Error al actualizar stock del producto ID: $id_producto");
                }
            }
        }
        
        // 3. Eliminar detalle de la factura de compra
        $del2 = "DELETE FROM detalle_fact_compra WHERE id_factura='$id_factura'";
        $delete2 = mysqli_query($conexion, $del2);
        
        if (!$delete2) {
            throw new Exception("Error al eliminar detalles de la compra");
        }
        
        // 4. Eliminar la factura de compra
        $del1 = "DELETE FROM facturas_compras WHERE id_factura='$id_factura'";
        $delete1 = mysqli_query($conexion, $del1);
        
        if (!$delete1) {
            throw new Exception("Error al eliminar la compra");
        }
        
        // Confirmar transacción
        mysqli_commit($conexion);
        ?>
        <div class="alert alert-success alert-dismissible" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                <span aria-hidden="true">&times;</span>
            </button>
            <strong>¡Éxito!</strong> Compra eliminada y stock de productos actualizado correctamente.
        </div>
        <?php
        
    } catch (Exception $e) {
        // Revertir transacción en caso de error
        mysqli_rollback($conexion);
        ?>
        <div class="alert alert-danger alert-dismissible" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                <span aria-hidden="true">&times;</span>
            </button>
            <strong>¡Error!</strong> <?php echo $e->getMessage(); ?>
        </div>
        <?php
    }
}

/* Mostrar errores */
if (isset($errors)) {
    ?>
    <div class="alert alert-danger" role="alert">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        <strong>Error!</strong>
        <?php
        foreach ($errors as $error) {
            echo $error;
        }
        ?>
    </div>
    <?php
}
?>