<?php
session_start();
include("conexion.php");

if (!isset($_SESSION['id_usuario'])) {
    echo json_encode(['status' => 'error', 'message' => 'Sesión no iniciada.']);
    exit;
}

$id_usuario = $_SESSION['id_usuario'];

// Verificar datos enviados
if (!isset($_POST['tipo_movimiento'], $_POST['fecha_movimiento'], $_POST['empresa_mov'], $_POST['bodega_mov'], $_POST['proveedor_mov'], $_POST['detalle_boleta'], $_POST['numero_comprobante'], $_POST['producto_carro'], $_POST['cantidad_carro'])) {
    echo json_encode(['status' => 'error', 'message' => 'Faltan datos obligatorios.']);
    exit;
}

$tipo = $_POST['tipo_movimiento'];
$fecha_movimiento = $_POST['fecha_movimiento'];
$detalle = $_POST['detalle_boleta'];
$numero_comprobante = $_POST['numero_comprobante'];
$id_empresa = $_POST['empresa_mov'];
$id_bodega = $_POST['bodega_mov'];
$id_proveedor = $_POST['proveedor_mov'];

$productos = $_POST['producto_carro'];
$cantidades = $_POST['cantidad_carro'];

if (count($productos) !== count($cantidades)) {
    echo json_encode(['status' => 'error', 'message' => 'La cantidad de productos y cantidades no coincide.']);
    exit;
}

// Insertar boleta con el nuevo campo
$stmt = $conexion->prepare("INSERT INTO boletas_movimiento (fecha_movimiento, tipo_movimiento, detalle, numero_comprobante, id_empresa, id_bodega, id_proveedor, id_usuario) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssiiii", $fecha_movimiento, $tipo, $detalle, $numero_comprobante, $id_empresa, $id_bodega, $id_proveedor, $id_usuario);

if (!$stmt->execute()) {
    echo json_encode(['status' => 'error', 'message' => 'Error al guardar la boleta: ' . $stmt->error]);
    exit;
}

$id_boleta = $stmt->insert_id;
$stmt->close();

// Insertar detalle y actualizar stock
$stmt_detalle = $conexion->prepare("INSERT INTO detalle_boleta_movimiento (id_boleta, producto, cantidad, unidad_medida) VALUES (?, ?, ?, ?)");

foreach ($productos as $i => $producto_id) {
    $cantidad = intval($cantidades[$i]);

    $query = $conexion->query("SELECT stock, unidad_medida FROM ferreteria WHERE id_producto = $producto_id");
    if (!$query || $query->num_rows == 0) {
        echo json_encode(['status' => 'error', 'message' => 'Producto no encontrado para el ID ' . $producto_id]);
        exit;
    }
    $producto = $query->fetch_assoc();
    $stock_actual = intval($producto['stock']);
    $unidad = $producto['unidad_medida'];

    if ($tipo === 'ingreso') {
        $nuevo_stock = $stock_actual + $cantidad;
    } elseif ($tipo === 'salida') {
        $nuevo_stock = $stock_actual - $cantidad;
        if ($nuevo_stock < 0) {
            echo json_encode(['status' => 'error', 'message' => 'Error: no hay suficiente stock del producto ID ' . $producto_id]);
            exit;
        }
    } else {
        echo json_encode(['status' => 'error', 'message' => 'Tipo de movimiento no válido.']);
        exit;
    }

    $conexion->query("UPDATE ferreteria SET stock = $nuevo_stock WHERE id_producto = $producto_id");

    $stmt_detalle->bind_param("isis", $id_boleta, $producto_id, $cantidad, $unidad);
    if (!$stmt_detalle->execute()) {
        echo json_encode(['status' => 'error', 'message' => 'Error al guardar detalle: ' . $stmt_detalle->error]);
        exit;
    }
}

$stmt_detalle->close();

echo json_encode(['status' => 'success', 'message' => 'Movimiento procesado correctamente.']);
exit;
?>
