<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

include 'config.php';
header('Content-Type: application/json');

$input = file_get_contents('php://input');
$data = json_decode($input, true);

if ($data && !empty($data['cart'])) {
    try {
        $pdo->beginTransaction();

        // جلب البيانات الأساسية من الـ Payload
        $branch_id     = $data['branch_id'] ?? 1;
        $shift_id      = $data['shift_id'] ?? 0;
        $total         = floatval($data['total_amount'] ?? 0);
        
        // بيانات العملة والخرينة
        $currency      = $data['currency'] ?? 'EGP';
        $exchange_rate = floatval($data['exchange_rate'] ?? 1.0);
        $paid_amount   = floatval($data['paid_amount'] ?? $total);

        // 1. تسجيل الفاتورة الرئيسية
        $stmt_order = $pdo->prepare("
            INSERT INTO orders (total_amount, shift_id, currency, exchange_rate, paid_amount, order_date) 
            VALUES (:total_amount, :shift_id, :currency, :exchange_rate, :paid_amount, NOW())
        ");
        
        $stmt_order->execute([
            ':total_amount'  => $total,
            ':shift_id'      => $shift_id,
            ':currency'      => $currency,
            ':exchange_rate' => $exchange_rate,
            ':paid_amount'   => $paid_amount
        ]);
        
        $order_id = $pdo->lastInsertId();

        // 2. تجهيز الاستعلامات
        $stmt_product_info = $pdo->prepare("SELECT is_composite, raw_product_id, consumption_qty FROM products WHERE id = :id");
        
        // 🔥 تم تحديث استعلام العناصر ليشمل free_qty و discount_percent
        $stmt_order_item = $pdo->prepare("
            INSERT INTO order_items (order_id, product_id, quantity, free_qty, discount_percent, price, total) 
            VALUES (:order_id, :product_id, :quantity, :free_qty, :discount_percent, :price, :total)
        ");

        $stmt_process_inventory = $pdo->prepare("
            INSERT INTO inventory (branch_id, product_id, quantity) 
            VALUES (:branch_id, :product_id, :quantity) 
            ON DUPLICATE KEY UPDATE quantity = quantity + :quantity_delta
        ");

        $debug_log = [];

        // 3. معالجة سلة المشتريات
        foreach ($data['cart'] as $item) {
            $item_id          = $item['id'] ?? null;
            $item_qty         = floatval($item['qty'] ?? 0);
            $free_qty         = floatval($item['free_qty'] ?? 0);         // 🔥 استقبال الكمية المجانية
            $discount_percent = floatval($item['discount_percent'] ?? 0); // 🔥 استقبال نسبة الخصم
            $item_price       = floatval($item['price'] ?? 0);
            $item_total       = floatval($item['total'] ?? 0);

            if (!$item_id || $item_qty <= 0) {
                $debug_log[] = "تخطي صنف: بيانات غير مكتملة أو كمية صفرية.";
                continue;
            }

            // أ. حفظ الصنف في تفاصيل الفاتورة بالبيانات الجديدة
            $stmt_order_item->execute([
                ':order_id'         => $order_id,
                ':product_id'       => $item_id,
                ':quantity'         => $item_qty,
                ':free_qty'         => $free_qty,
                ':discount_percent' => $discount_percent,
                ':price'            => $item_price,
                ':total'            => $item_total
            ]);

            // ب. جلب بيانات المنتج والخصم من المخزن (تخصم الكمية الكلية كاملة item_qty لأن الهدايا خرجت فعلياً)
            $stmt_product_info->execute([':id' => $item_id]);
            $prod = $stmt_product_info->fetch();

            if ($prod) {
                if ($prod['is_composite'] == 1 && !empty($prod['raw_product_id'])) {
                    $target_id = $prod['raw_product_id'];
                    $consumption_grams = floatval($prod['consumption_qty']);
                    $final_deduction = ($item_qty * $consumption_grams) / 1000;
                    $type = "صنف مركب (الخصم من خامة رقم {$target_id})";
                } else {
                    $target_id = $item_id;
                    $final_deduction = $item_qty;
                    $type = "صنف عادي/خام";
                }

                $negative_value = -1 * $final_deduction;

                $stmt_process_inventory->execute([
                    ':branch_id'      => $branch_id,
                    ':product_id'     => $target_id,
                    ':quantity'       => $negative_value,
                    ':quantity_delta' => $negative_value
                ]);

                $debug_log[] = "تمت معالجة المخزن للمنتج ({$target_id}) بنجاح بقيمة ({$negative_value}) | النوع: {$type}";
            } else {
                $debug_log[] = "خطأ: المنتج رقم ({$item_id}) غير موجود بجدول المنتجات.";
            }
        }

        $pdo->commit();
        
        echo json_encode([
            'status' => 'success', 
            'message' => 'Order Saved and Inventory Processed Successfully',
            'order_id' => $order_id,
            'debug_log' => $debug_log
        ]);

    } catch (Exception $e) {
        if ($pdo->inTransaction()) { $pdo->rollBack(); }
        echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
    }
} else {
    echo json_encode(['status' => 'error', 'message' => 'Empty Cart or Invalid Request']);
}