<?php
session_start();

// Initialiser le panier s'il n'existe pas
if (!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = [];
}

require_once 'config/db.php';

if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit();
}

$db = new Database();
$pdo = $db->getConnection();

// الحصول على قائمة المنتجات
try {
    $stmt = $pdo->query("SELECT id, name, price, quantity as stock, barcode FROM products ORDER BY name");
    $products = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // تحويل المنتجات إلى مصفوفة للاستخدام في JavaScript
    $productsJson = [];
    foreach ($products as $product) {
        $productsJson[$product['barcode']] = [
            'id' => $product['id'],
            'name' => $product['name'],
            'price' => $product['price'],
            'max_quantity' => $product['stock']
        ];
    }
} catch (PDOException $e) {
    $error = "حدث خطأ في قاعدة البيانات: " . $e->getMessage();
}

// معالجة إضافة البيع
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['sales_data'])) {
    try {
        $sales_data = json_decode($_POST['sales_data'], true);
        if (empty($sales_data)) {
            throw new Exception("لا توجد منتجات في السلة");
        }

        // بدء المعاملة
        $pdo->beginTransaction();
        $total_amount = 0;
        
        foreach ($sales_data as $item) {
            $product_id = $item['product_id'];
            $quantity = $item['quantity'];
            $price = $item['price'];
            
            // التحقق من توفر الكمية
            $stmt = $pdo->prepare("SELECT quantity FROM products WHERE id = ?");
            $stmt->execute([$product_id]);
            $product = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if (!$product || $product['quantity'] < $quantity) {
                throw new Exception("الكمية المطلوبة غير متوفرة في المخزون للمنتج رقم " . $product_id);
            }
            
            // إضافة البيع
            $stmt = $pdo->prepare("INSERT INTO sales (product_id, quantity, price, sale_date) VALUES (?, ?, ?, datetime('now'))");
            $stmt->execute([$product_id, $quantity, $price]);
            
            // تحديث كمية المنتج
            $stmt = $pdo->prepare("UPDATE products SET quantity = quantity - ? WHERE id = ?");
            $stmt->execute([$quantity, $product_id]);

            $total_amount += $quantity * $price;
        }
        
        $pdo->commit();
        $_SESSION['message'] = sprintf('تم تسجيل البيع بنجاح. المجموع: %.2f درهم', $total_amount);
        
        // Collecter les IDs des ventes pour la facture
        $sale_ids = [];
        $stmt = $pdo->query("SELECT id FROM sales WHERE sale_date >= datetime('now', '-1 minute') ORDER BY id DESC LIMIT " . count($sales_data));
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $sale_ids[] = $row['id'];
        }
        
        // إرجاع النجاح
        echo json_encode([
            'success' => true,
            'total_amount' => $total_amount,
            'sale_ids' => $sale_ids,
            'message' => sprintf('تم تسجيل البيع بنجاح. المجموع: %.2f درهم', $total_amount)
        ]);
        exit();
        
    } catch (Exception $e) {
        $pdo->rollBack();
        http_response_code(400);
        echo json_encode(['error' => $e->getMessage()]);
        exit();
    }
}
?>
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>تسجيل بيع جديد - نظام إدارة البقالة</title>
    <!-- CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
    <style>
        .cart-item.highlight {
            background-color: #fff3cd;
            transition: background-color 0.3s;
        }
        .status-indicator {
            position: fixed;
            top: 20px;
            right: 20px;
            z-index: 1050;
            display: none;
        }
        .auto-mode-switch {
            margin-bottom: 1rem;
            padding: 0.5rem;
            background-color: #f8f9fa;
            border-radius: 0.25rem;
        }
    </style>
</head>
<body>
    <?php include 'includes/navbar.php'; ?>

    <div class="container mt-4">
        <div class="row">
            <div class="col-md-6">
                <div class="card">
                    <div class="card-body">
                        <h5 class="card-title">إضافة منتج</h5>
                        <div class="auto-mode-switch">
                            <div class="form-check form-switch">
                                <input class="form-check-input" type="checkbox" id="autoAddMode" checked>
                                <label class="form-check-label" for="autoAddMode">
                                    إضافة تلقائية للمنتجات
                                </label>
                            </div>
                        </div>
                        <div class="mb-3">
                            <label for="barcode" class="form-label">الباركود</label>
                            <input type="text" class="form-control" id="barcode" placeholder="امسح الباركود أو أدخله يدويًا">
                        </div>
                        <div class="mb-3">
                            <label class="form-label">الكمية</label>
                            <div class="input-group">
                                <input type="number" class="form-control" id="quantity" value="1" min="1">
                                <button class="btn btn-outline-secondary" type="button" id="increment">+</button>
                                <button class="btn btn-outline-secondary" type="button" id="decrement">-</button>
                            </div>
                        </div>
                        <button class="btn btn-primary" id="addProduct" style="display: none;">إضافة للسلة</button>
                    </div>
                </div>
            </div>
            <div class="col-md-6">
                <div class="card">
                    <div class="card-body">
                        <h5 class="card-title">السلة</h5>
                        <div id="cart-items"></div>
                        <div class="text-end mt-3">
                            <h4>المجموع: <span id="total-amount">0.00</span> د.م</h4>
                            <button class="btn btn-primary" id="complete-sale">إتمام البيع</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- مؤشر الحالة -->
    <div id="status-indicator" class="status-indicator"></div>

    <!-- Template for cart items -->
    <template id="cart-item-template">
        <div class="cart-item mb-3 p-2 border rounded">
            <div class="row align-items-center">
                <div class="col">
                    <strong class="product-name"></strong>
                </div>
                <div class="col-auto">
                    <div class="input-group">
                        <button class="btn btn-outline-secondary decrease-quantity" type="button">-</button>
                        <input type="number" class="form-control product-quantity" min="1" style="width: 70px">
                        <button class="btn btn-outline-secondary increase-quantity" type="button">+</button>
                    </div>
                </div>
                <div class="col-auto">
                    <span class="product-price"></span> د.م
                </div>
                <div class="col-auto">
                    <button type="button" class="btn btn-danger btn-sm remove-item">×</button>
                </div>
            </div>
        </div>
    </template>

    <!-- JavaScript -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
    <script src="assets/sounds/beep.js"></script>
    
    <script>
        const products = <?php echo json_encode($productsJson); ?>;
        let beepSound = null;
        
        $(document).ready(function() {
            const $barcode = $('#barcode');
            const $quantity = $('#quantity');
            const $cartItems = $('#cart-items');
            const $autoAddMode = $('#autoAddMode');
            const $addProduct = $('#addProduct');

            // Initialiser le son de beep
            try {
                beepSound = createBeepSound();
            } catch (e) {
                console.warn('Audio context not available:', e);
            }
            
            // Fonction pour jouer le son de beep
            function playBeep() {
                if (beepSound) {
                    try {
                        beepSound = createBeepSound();
                        beepSound.play();
                    } catch (e) {
                        console.warn('Error playing beep:', e);
                    }
                }
            }
            
            // Fonction pour mettre à jour le total
            function updateTotal() {
                let total = 0;
                $('.cart-item').each(function() {
                    const quantity = parseInt($(this).find('.product-quantity').val()) || 0;
                    const price = parseFloat($(this).find('.product-price').text()) || 0;
                    total += quantity * price;
                });
                $('#total-amount').text(total.toFixed(2));
            }

            // Fonction pour ajouter au panier
            async function addToCart(barcode) {
                try {
                    const product = products[barcode];
                    if (!product) {
                        showStatus('المنتج غير موجود', 'danger');
                        return false;
                    }

                    const quantity = parseInt($quantity.val()) || 1;

                    // Appel AJAX pour ajouter au panier
                    const response = await $.ajax({
                        url: 'add_to_cart.php',
                        method: 'POST',
                        data: {
                            product_id: product.id,
                            quantity: quantity
                        },
                        dataType: 'json'
                    });

                    if (response.error) {
                        showStatus(response.error, 'danger');
                        return false;
                    }

                    const existingItem = $(`.cart-item[data-barcode="${barcode}"]`);
                    if (existingItem.length > 0) {
                        const quantityInput = existingItem.find('.product-quantity');
                        const currentQty = parseInt(quantityInput.val()) || 0;
                        const maxQty = parseInt(product.max_quantity);
                        const newQty = Math.min(maxQty, currentQty + quantity);
                        
                        if (newQty !== currentQty) {
                            quantityInput.val(newQty).trigger('change');
                            highlightCartItem(existingItem);
                            showStatus('تم تحديث الكمية بنجاح', 'success');
                            playBeep(); // Jouer le son après mise à jour réussie
                            updateTotal();
                        } else {
                            showStatus('تجاوزت الكمية المتوفرة', 'danger');
                        }
                        return true;
                    }

                    if (quantity > product.max_quantity) {
                        showStatus('تجاوزت الكمية المتوفرة', 'danger');
                        return false;
                    }

                    const template = document.getElementById('cart-item-template');
                    const cartItem = template.content.cloneNode(true);
                    const $cartItem = $(cartItem).find('.cart-item');
                    
                    $cartItem.attr({
                        'data-product-id': product.id,
                        'data-barcode': barcode,
                        'data-max-quantity': product.max_quantity
                    });

                    $cartItem.find('.product-name').text(product.name);
                    $cartItem.find('.product-price').text(product.price);
                    $cartItem.find('.product-quantity').val(quantity);

                    $cartItems.append($cartItem);
                    highlightCartItem($cartItem);
                    updateTotal();
                    showStatus('تمت إضافة المنتج بنجاح', 'success');
                    playBeep(); // Jouer le son après ajout réussi

                    // Clear barcode input and reset quantity
                    $barcode.val('').focus();
                    $quantity.val(1);
                    
                    return true;
                } catch (error) {
                    console.error('Error adding to cart:', error);
                    showStatus('حدث خطأ أثناء إضافة المنتج', 'danger');
                    return false;
                }
            }

            // Handle barcode input
            $barcode.on('keypress', function(e) {
                if (e.which === 13) {
                    e.preventDefault();
                    const barcode = $(this).val().trim();
                    if (barcode) {
                        if ($autoAddMode.is(':checked')) {
                            addToCart(barcode);
                        } else {
                            // En mode manuel, vérifier si le produit existe
                            if (products[barcode]) {
                                $addProduct.prop('disabled', false);
                            } else {
                                showStatus('المنتج غير موجود', 'danger');
                                $addProduct.prop('disabled', true);
                            }
                        }
                    }
                }
            });

            // Gérer le changement de mode
            $autoAddMode.on('change', function() {
                if (this.checked) {
                    $addProduct.hide();
                } else {
                    $addProduct.show();
                }
                $barcode.focus();
            });

            // Handle add product button
            $addProduct.on('click', function() {
                const barcode = $barcode.val().trim();
                if (barcode) {
                    addToCart(barcode);
                }
            });

            // Focus barcode on quantity change
            $quantity.on('change', function() {
                $barcode.focus();
            });

            // Automatically focus barcode input after any action
            $(document).on('click', function(e) {
                if (!$(e.target).is('input, select, button, .btn *')) {
                    $barcode.focus();
                }
            });

            // Handle quantity changes
            $(document).on('change', '.product-quantity', function() {
                const $item = $(this).closest('.cart-item');
                const quantity = parseInt($(this).val()) || 0;
                const maxQuantity = parseInt($item.data('max-quantity'));

                if (quantity < 1) {
                    $(this).val(1);
                } else if (quantity > maxQuantity) {
                    $(this).val(maxQuantity);
                    showStatus('تم تعديل الكمية إلى الحد الأقصى المتوفر', 'warning');
                }
                updateTotal();
            });

            // Handle remove item
            $(document).on('click', '.remove-item', function() {
                $(this).closest('.cart-item').remove();
                updateTotal();
                showStatus('تم حذف المنتج من السلة', 'success');
            });

            // Handle quantity buttons
            $('#increment').click(function() {
                let val = parseInt($quantity.val()) || 0;
                $quantity.val(val + 1);
            });

            $('#decrement').click(function() {
                let val = parseInt($quantity.val()) || 0;
                if (val > 1) {
                    $quantity.val(val - 1);
                }
            });

            // Handle increase/decrease quantity buttons
            $(document).on('click', '.increase-quantity', function() {
                const $input = $(this).siblings('.product-quantity');
                let val = parseInt($input.val()) || 0;
                $input.val(val + 1).trigger('change');
            });

            $(document).on('click', '.decrease-quantity', function() {
                const $input = $(this).siblings('.product-quantity');
                let val = parseInt($input.val()) || 0;
                if (val > 1) {
                    $input.val(val - 1).trigger('change');
                }
            });

            function highlightCartItem($item) {
                $('.cart-item').removeClass('highlight');
                $item.addClass('highlight');
            }

            function showStatus(message, type = 'success') {
                const $status = $('#status-indicator');
                $status.removeClass('alert-success alert-danger alert-warning')
                    .addClass(`alert alert-${type}`)
                    .text(message)
                    .fadeIn()
                    .delay(3000)
                    .fadeOut();
            }

            // Handle complete sale
            $('#complete-sale').click(function() {
                const salesData = [];
                $('.cart-item').each(function() {
                    const $item = $(this);
                    salesData.push({
                        product_id: $item.data('product-id'),
                        quantity: parseInt($item.find('.product-quantity').val()),
                        price: parseFloat($item.find('.product-price').text())
                    });
                });

                if (salesData.length === 0) {
                    showStatus('لا توجد منتجات في السلة', 'warning');
                    return;
                }

                // Désactiver le bouton pendant le traitement
                const $button = $(this);
                $button.prop('disabled', true).html('<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> جاري المعالجة...');

                $.ajax({
                    url: window.location.href,
                    method: 'POST',
                    data: {
                        sales_data: JSON.stringify(salesData)
                    },
                    dataType: 'json',
                    success: function(response) {
                        if (response.success) {
                            showStatus(response.message, 'success');
                            
                            // Ouvrir la facture dans une nouvelle fenêtre
                            if (response.sale_ids && response.sale_ids.length > 0) {
                                const receiptWindow = window.open('generate_receipt.php?sales=' + response.sale_ids.join(','), 'receipt', 'width=400,height=600');
                                
                                // Attendre que la facture soit générée avant de rediriger
                                const checkPrint = setInterval(function() {
                                    if (receiptWindow.closed) {
                                        clearInterval(checkPrint);
                                        window.location.href = 'sales.php';
                                    }
                                }, 500);
                            } else {
                                // Rediriger si pas de facture
                                setTimeout(function() {
                                    window.location.href = 'sales.php';
                                }, 1500);
                            }
                        } else {
                            showStatus(response.error || 'حدث خطأ أثناء معالجة البيع', 'danger');
                            $button.prop('disabled', false).text('إتمام البيع');
                        }
                    },
                    error: function(xhr) {
                        const response = xhr.responseJSON || {};
                        showStatus(response.error || 'حدث خطأ أثناء إتمام البيع', 'danger');
                        $button.prop('disabled', false).text('إتمام البيع');
                    }
                });
            });

            // Focus barcode input on load
            $barcode.focus();
        });
    </script>
</body>
</html>
