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

// 1. OBTENER TASA
$sql_tasa = mysqli_query($con, "SELECT tasa FROM tasa WHERE id_tasa='1'");
$res_tasa = mysqli_fetch_array($sql_tasa);
$tasa_actual = ($res_tasa) ? $res_tasa['tasa'] : 1;

// 2. VARIABLES DE SESIÓN
$id_factura = $_SESSION['id_factura'];
$numero_factura = $_SESSION['numero_factura'];
$facturar = $_SESSION['facturar'] ?? 'NO';

$sql_fac = mysqli_query($con, "SELECT almacen FROM facturas WHERE id_factura='$id_factura'");
$res_fac = mysqli_fetch_array($sql_fac);
$id_almacen = intval($res_fac['almacen']);

// --- 3. LÓGICA PARA ELIMINAR (Devolver Stock) ---
if (isset($_GET['id'])) {
    $id_detalle = intval($_GET['id']);
    $sql_det = mysqli_query($con, "SELECT id_producto, cantidad FROM detalle_factura WHERE id_detalle='$id_detalle'");
    $row_det = mysqli_fetch_array($sql_det);
    if ($row_det) {
        $id_prod_f = $row_det['id_producto'];
        $cant_vencida = $row_det['cantidad'];

        $sql_comp = "SELECT c.cantidad as cant_receta, p_inv.id_producto as id_insumo_real
                     FROM composicion_producto_final c
                     INNER JOIN products p_receta ON c.id_producto = p_receta.id_producto
                     INNER JOIN products p_inv ON TRIM(UPPER(p_receta.nombre_producto)) = TRIM(UPPER(p_inv.nombre_producto))
                     WHERE c.id_producto_final = $id_prod_f AND p_inv.almacen = $id_almacen";
        
        $res_comp = mysqli_query($con, $sql_comp);
        while ($row_c = mysqli_fetch_array($res_comp)) {
            $devolver = $row_c['cant_receta'] * $cant_vencida;
            $id_insumo = $row_c['id_insumo_real'];
            mysqli_query($con, "UPDATE products SET existencia = existencia + $devolver WHERE id_producto = $id_insumo");
        }
    }
    $delete = mysqli_query($con, "DELETE FROM detalle_factura WHERE id_detalle='" . $id_detalle . "'");
} 

// --- 4. LÓGICA PARA AGREGAR ---
else if (isset($_POST['id'])) {
    $id_producto_final = intval($_POST['id']);
    $cantidad_nueva = $_POST['cantidad'];
    $precio_venta = $_POST['precio_venta'];

    $puedo_vender = true;
    $msg_error = "";

    // Agregamos BINARY o simplificamos la búsqueda para evitar fallos de servidor
    $sql_val = "SELECT c.cantidad as cant_receta, p_inv.id_producto as id_insumo_real, 
                       p_inv.nombre_producto, p_inv.existencia 
                FROM composicion_producto_final c
                INNER JOIN products p_receta ON c.id_producto = p_receta.id_producto
                INNER JOIN products p_inv ON p_receta.nombre_producto = p_inv.nombre_producto
                WHERE c.id_producto_final = $id_producto_final 
                AND p_inv.almacen = $id_almacen";

    $res_val = mysqli_query($con, $sql_val);
    
    if ($res_val && mysqli_num_rows($res_val) > 0) {
        $insumos_a_descontar = [];
        while ($row = mysqli_fetch_array($res_val)) {
            $necesario = $row['cant_receta'] * $cantidad_nueva;
            if ($row['existencia'] < $necesario) {
                $puedo_vender = false;
                $msg_error = "Stock insuficiente de: " . $row['nombre_producto'] . " (Disponible: " . $row['existencia'] . ")";
                break;
            }
            $insumos_a_descontar[] = ['id' => $row['id_insumo_real'], 'cantidad' => $necesario];
        }
    } else {
        $puedo_vender = false;
        // Depuración: Si no encuentra nada, verificamos si es por el almacén o la receta
        $check_receta = mysqli_query($con, "SELECT * FROM composicion_producto_final WHERE id_producto_final = $id_producto_final");
        if (mysqli_num_rows($check_receta) == 0) {
            $msg_error = "El producto no tiene receta creada.";
        } else {
            $msg_error = "Los ingredientes de la receta no existen en el Almacén ID: $id_almacen.";
        }
    }

if ($puedo_vender) {
    foreach ($insumos_a_descontar as $insumo) {
        $id_i = $insumo['id'];
        $cant_i = $insumo['cantidad'];
        mysqli_query($con, "UPDATE products SET existencia = existencia - $cant_i WHERE id_producto = $id_i");
    }
    
    // 1. Aseguramos valores numéricos limpios
    $precio_db = floatval($precio_venta);
    $tasa_db = floatval($tasa_actual);

    // 2. INSERT COMPLETO: Incluimos codigo, almacen y tasa
    $sql_insert = "INSERT INTO detalle_factura (numero_factura, id_producto, cantidad, precio_venta, codigo, almacen, tasa) 
                   VALUES ('$numero_factura', '$id_producto_final', '$cantidad_nueva', '$precio_db', '$id_producto_final', '$id_almacen', '$tasa_db')";
    
    $insert = mysqli_query($con, $sql_insert);
    
    if (!$insert) {
        $error_db = addslashes(mysqli_error($con));
        echo "<script>alert('Error SQL: $error_db');</script>";
    }
}
}
?>

<table class="table" style="font-size:11px;">
    <tr class="info">
        <th class='text-center'>CANT.</th>
        <th>DESCRIPCIÓN</th>
        <th class='text-right'>PRECIO $</th>
        <th class='text-right'>TOTAL $</th>
        <th class='text-right'>TOTAL BS.</th>
        <th></th>
    </tr>
    <?php
    $sumador_total = 0;
    $sql_detalle = mysqli_query($con, "SELECT d.*, p.nombre FROM detalle_factura d 
                                      INNER JOIN producto_final p ON d.id_producto = p.id 
                                      WHERE d.numero_factura = '$numero_factura'");
    
    while ($row = mysqli_fetch_array($sql_detalle)) {
        $id_detalle = $row["id_detalle"];
        $cantidad = $row['cantidad'];
        $nombre_producto = $row['nombre'];
        $precio_venta = $row['precio_venta'];
        $precio_total = $precio_venta * $cantidad;
        $sumador_total += $precio_total;
        $total_bs = $precio_total * $tasa_actual;
        $ok_factura = mysqli_query($con, "UPDATE facturas SET por_cobrar = '$sumador_total' WHERE numero_factura = '$numero_factura'");
    ?>
    <tr>
        <td class='text-center'><?php echo $cantidad; ?></td>
        <td><?php echo $nombre_producto; ?></td>
        <td class='text-right'><?php echo number_format($precio_venta, 2); ?></td>
        <td class='text-right'><?php echo number_format($precio_total, 2); ?></td>
        <td class='text-right'><?php echo number_format($total_bs, 2, ',', '.'); ?></td>
        <td class='text-center'>
            <a href="#" onclick="eliminar('<?php echo $id_detalle ?>')"><i class="glyphicon glyphicon-trash" style="color:red; cursor:pointer;"></i></a>
        </td>
    </tr>
    <?php
    }
    
    $subtotal = number_format($sumador_total, 2, '.', '');
    $total_iva = ($facturar == "SI") ? ($subtotal * 0.16) : 0;
    $total_factura = $subtotal + $total_iva;
    
    mysqli_query($con, "UPDATE facturas SET total_venta='$total_factura' WHERE id_factura='$id_factura'");
    ?>
    <tr>
        <td class='text-right' colspan=3>SUBTOTAL $</td>
        <td class='text-right'><?php echo number_format($subtotal, 2); ?></td>
        <td class='text-right'><?php echo number_format($subtotal * $tasa_actual, 2, ',', '.'); ?></td>
        <td></td>
    </tr>
    <tr>
        <td class='text-right' colspan=3>IVA (16%) $</td>
        <td class='text-right'><?php echo number_format($total_iva, 2); ?></td>
        <td class='text-right'><?php echo number_format($total_iva * $tasa_actual, 2, ',', '.'); ?></td>
        <td></td>
    </tr>
    <tr style="background: #fdfdfd;">
        <td class='text-right' colspan=3><strong style="font-size:14px;">TOTAL:</strong></td>
        <td class='text-right'><strong style="font-size:14px;">$<?php echo number_format($total_factura, 2); ?></strong></td>
        <td class='text-right'><strong style="font-size:14px;"><?php echo number_format($total_factura * $tasa_actual, 2, ',', '.'); ?> Bs.</strong></td>
        <td></td>
    </tr>
</table>