<?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. Verificar que la factura existe
        $query_factura = "SELECT * FROM facturas_ventas WHERE id_factura='$id_factura'";
        $result_factura = mysqli_query($conexion, $query_factura);
        if (mysqli_num_rows($result_factura) == 0) {
            throw new Exception("La factura #$id_factura no existe.");
        }
        
        // 2. Obtener todos los productos y cantidades del detalle de venta, incluyendo sucursal_id
        $query_detalle = "SELECT id_producto, cantidad, sucursal_id FROM detalle_fact_ventas WHERE id_factura='$id_factura'";
        $result_detalle = mysqli_query($conexion, $query_detalle);
        
        if (!$result_detalle) {
            throw new Exception("Error al obtener el detalle de la venta: " . mysqli_error($conexion));
        }
        
        $num_detalles = mysqli_num_rows($result_detalle);
        
        if ($num_detalles > 0) {
            // 3. Recorrer cada producto y SUMAR la cantidad al stock
            while ($row = mysqli_fetch_assoc($result_detalle)) {
                $id_producto = intval($row['id_producto']);
                $cantidad = floatval($row['cantidad']);
                $sucursal_id = intval($row['sucursal_id']);
                
                // Verificar si la tabla productos tiene sucursal_id
                $check_sucursal = mysqli_query($conexion, "SHOW COLUMNS FROM productos LIKE 'sucursal_id'");
                $has_sucursal = (mysqli_num_rows($check_sucursal) > 0);
                
                // Construir la condición WHERE
                $where = "id_producto = $id_producto";
                if ($has_sucursal && $sucursal_id > 0) {
                    $where .= " AND sucursal_id = $sucursal_id";
                }
                
                // Actualizar stock del producto SUMANDO la cantidad
                $update_stock = "UPDATE productos 
                                SET stock_producto = stock_producto + $cantidad 
                                WHERE $where";
                
                $result_update = mysqli_query($conexion, $update_stock);
                
                if (!$result_update) {
                    throw new Exception("Error al actualizar stock del producto ID: $id_producto - " . mysqli_error($conexion));
                }
                
                // Verificar que se actualizó al menos una fila
                $affected = mysqli_affected_rows($conexion);
                if ($affected == 0) {
                    // Esto no es necesariamente un error, pero es bueno registrarlo
                    error_log("Advertencia: No se actualizó ningún stock para el producto ID: $id_producto, sucursal: $sucursal_id");
                }
            }
        } else {
            // No hay detalles, pero igual se puede eliminar la factura? Depende de tu lógica.
            // Tal vez quieras lanzar un error o solo un mensaje.
            // En este caso, continuamos sin actualizar stock.
        }
        
        // 4. Eliminar detalle de la factura de venta
        $del2 = "DELETE FROM detalle_fact_ventas WHERE id_factura='$id_factura'";
        $delete2 = mysqli_query($conexion, $del2);
        
        if (!$delete2) {
            throw new Exception("Error al eliminar detalles de la venta: " . mysqli_error($conexion));
        }
        
        $detalles_eliminados = mysqli_affected_rows($conexion);
        
        // 5. Eliminar la factura de venta
        $del1 = "DELETE FROM facturas_ventas WHERE id_factura='$id_factura'";
        $delete1 = mysqli_query($conexion, $del1);
        
        if (!$delete1) {
            throw new Exception("Error al eliminar la venta: " . mysqli_error($conexion));
        }
        
        $factura_eliminada = mysqli_affected_rows($conexion);
        
        // Confirmar transacción
        mysqli_commit($conexion);
        
        // Mensaje de éxito
        $messages[] = "Venta #$id_factura eliminada correctamente. Detalles eliminados: $detalles_eliminados, Factura eliminada: $factura_eliminada.";
        ?>
        <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> Venta eliminada correctamente y stock de productos restaurado.
        </div>
        <?php
        
    } catch (Exception $e) {
        // Revertir transacción en caso de error
        mysqli_rollback($conexion);
        
        $errors[] = $e->getMessage();
        ?>
        <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
}

/* Mostrar mensajes de éxito */
if (isset($messages)) {
    ?>
    <div class="alert alert-success" role="alert">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        <strong>¡Éxito!</strong>
        <?php
        foreach ($messages as $message) {
            echo $message;
        }
        ?>
    </div>
    <?php
}
?>