<?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();
}

$product_id = $_POST['id'] ?? null;
$new_quantity = $_POST['quantity'] ?? null;

if (!$product_id || !isset($new_quantity) || !is_numeric($new_quantity)) {
    http_response_code(400);
    echo json_encode(['error' => 'معرف المنتج والكمية الجديدة مطلوبة']);
    exit();
}

try {
    $db = new Database();
    $pdo = $db->getConnection();
    
    // بدء المعاملة
    $pdo->beginTransaction();
    
    // الحصول على معلومات المنتج
    $stmt = $pdo->prepare("SELECT quantity FROM products WHERE id = ?");
    $stmt->execute([$product_id]);
    $product = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$product) {
        throw new Exception('المنتج غير موجود');
    }
    
    // حساب الفرق في الكمية
    $quantity_difference = $new_quantity - $product['quantity'];
    
    // تحديث كمية المنتج
    $stmt = $pdo->prepare("UPDATE products SET quantity = ? WHERE id = ?");
    $stmt->execute([$new_quantity, $product_id]);
    
    // إضافة حركة مخزون جديدة لتوثيق إعادة التعيين
    $stmt = $pdo->prepare("
        INSERT INTO stock_movements (product_id, quantity, type, reason) 
        VALUES (?, ?, ?, ?)
    ");
    $stmt->execute([
        $product_id,
        abs($quantity_difference),
        $quantity_difference >= 0 ? 'in' : 'out',
        'إعادة تعيين المخزون'
    ]);
    
    // تأكيد المعاملة
    $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()]);
}
