<?php
/**
 * AJAX para agregar gastos de inventario
 */
require_once __DIR__ . '/../../config/config.php';
if (!isLoggedIn()) {
    http_response_code(401);
    header('Content-Type: application/json');
    echo json_encode(['success' => false, 'error' => 'No autorizado']);
    exit;
}

header('Content-Type: application/json');

if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_POST['agregar_gasto_ajax'])) {
    echo json_encode(['success' => false, 'error' => 'Petición inválida']);
    exit;
}

try {
    $db = getDB();
    $db->beginTransaction();
    
    $insumo_id = intval($_POST['insumo_id']);
    $cantidad = floatval($_POST['cantidad']);
    $motivo = sanitize(isset($_POST['motivo']) ? $_POST['motivo'] : 'Gasto adicional');
    $orden_id = intval($_POST['orden_id']);
    
    if ($insumo_id <= 0 || $cantidad <= 0 || $orden_id <= 0) {
        throw new Exception('Datos inválidos');
    }
    
    // Verificar que la orden existe
    $stmtOrden = $db->prepare("SELECT id FROM ordenes WHERE id = ?");
    $stmtOrden->execute([$orden_id]);
    if (!$stmtOrden->fetch()) {
        throw new Exception('Orden no encontrada');
    }
    
    // Obtener stock actual
    $stmtStock = $db->prepare("SELECT stock_actual, nombre FROM insumos WHERE id = ?");
    $stmtStock->execute([$insumo_id]);
    $insumo = $stmtStock->fetch();
    
    if (!$insumo) {
        throw new Exception('Insumo no encontrado');
    }
    
    $stockActual = $insumo['stock_actual'];
    $nuevoStock = $stockActual - $cantidad;
    
    // Actualizar stock
    $stmtUpdate = $db->prepare("UPDATE insumos SET stock_actual = ? WHERE id = ?");
    $stmtUpdate->execute([$nuevoStock, $insumo_id]);
    
    // Registrar movimiento
    $stmtMov = $db->prepare("
        INSERT INTO movimientos_inventario 
        (insumo_id, tipo, cantidad, stock_anterior, stock_nuevo, motivo, orden_id, usuario_id)
        VALUES (?, 'salida', ?, ?, ?, ?, ?, ?)
    ");
    $stmtMov->execute([
        $insumo_id,
        $cantidad,
        $stockActual,
        $nuevoStock,
        $motivo,
        $orden_id,
        $_SESSION['user_id']
    ]);
    
    $db->commit();
    
    echo json_encode([
        'success' => true,
        'message' => 'Gasto agregado correctamente',
        'nuevo_stock' => $nuevoStock,
        'insumo_nombre' => $insumo['nombre']
    ]);
    
} catch (Exception $e) {
    if (isset($db) && $db->inTransaction()) {
        $db->rollBack();
    }
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
