<?php
header('Content-Type: application/json');
session_start();

if (!isset($_SESSION['user_id'])) {
    http_response_code(401);
    echo json_encode(['error' => 'غير مصرح']);
    exit();
}

require_once '../config/db.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['error' => 'طريقة غير مسموحة']);
    exit();
}

$movement_id = $_POST['id'] ?? null;

if (!$movement_id) {
    http_response_code(400);
    echo json_encode(['error' => 'معرف الحركة مطلوب']);
    exit();
}

try {
    $db = new Database();
    $pdo = $db->getConnection();
    
    // بدء المعاملة
    $pdo->beginTransaction();
    
    // الحصول على معلومات الحركة
    $stmt = $pdo->prepare("
        SELECT sm.*, p.quantity as current_quantity 
        FROM stock_movements sm
        JOIN products p ON sm.product_id = p.id
        WHERE sm.id = ?
    ");
    $stmt->execute([$movement_id]);
    $movement = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$movement) {
        throw new Exception('حركة المخزون غير موجودة');
    }
    
    // حساب الكمية الجديدة
    $new_quantity = $movement['current_quantity'];
    if ($movement['type'] === 'in') {
        $new_quantity -= $movement['quantity'];
    } else {
        $new_quantity += $movement['quantity'];
    }
    
    // التحقق من أن الكمية الجديدة ليست سالبة
    if ($new_quantity < 0) {
        throw new Exception('لا يمكن حذف هذه الحركة لأنها ستؤدي إلى كمية سالبة');
    }
    
    // تحديث كمية المنتج
    $stmt = $pdo->prepare("UPDATE products SET quantity = ? WHERE id = ?");
    $stmt->execute([$new_quantity, $movement['product_id']]);
    
    // حذف حركة المخزون
    $stmt = $pdo->prepare("DELETE FROM stock_movements WHERE id = ?");
    $stmt->execute([$movement_id]);
    
    // تأكيد المعاملة
    $pdo->commit();
    
    echo json_encode(['success' => true]);
    
} catch (Exception $e) {
    // التراجع عن المعاملة في حالة حدوث خطأ
    if ($pdo->inTransaction()) {
        $pdo->rollBack();
    }
    
    http_response_code(400);
    echo json_encode(['error' => $e->getMessage()]);
}
