<?php
require_once __DIR__ . '/db.php';

function auto_cancel_expired_orders($pdo) {
    try {
        // ค้นหาออเดอร์ที่สถานะเป็น pending และสร้างเกิน 30 นาทีแล้ว
        $stmt = $pdo->prepare("SELECT id FROM orders WHERE status = 'pending' AND created_at < NOW() - INTERVAL 30 MINUTE");
        $stmt->execute();
        $expiredOrders = $stmt->fetchAll(PDO::FETCH_COLUMN);

        if (!empty($expiredOrders)) {
            $pdo->beginTransaction();
            foreach ($expiredOrders as $order_id) {
                // ดึงรายการสินค้าที่ถูกจองไว้ในออเดอร์ เพื่อคืนสต็อกสินค้า
                $stmtItems = $pdo->prepare("SELECT product_id, quantity FROM order_items WHERE order_id = ?");
                $stmtItems->execute([$order_id]);
                $items = $stmtItems->fetchAll();

                $stmtRestock = $pdo->prepare("UPDATE products SET stock = stock + ? WHERE id = ?");
                foreach ($items as $item) {
                    $stmtRestock->execute([$item['quantity'], $item['product_id']]);
                }

                // อัปเดตสถานะออเดอร์เป็น cancelled
                $stmtCancel = $pdo->prepare("UPDATE orders SET status = 'cancelled' WHERE id = ?");
                $stmtCancel->execute([$order_id]);
            }
            $pdo->commit();
        }
    } catch (Exception $e) {
        if ($pdo->inTransaction()) {
            $pdo->rollBack();
        }
        error_log("Auto cancel orders error: " . $e->getMessage());
    }
}

// เรียกทำงานทันทีเพื่อตรวจเช็คออเดอร์หมดอายุทุกครั้งที่มีการโหลดหน้าเว็บ
auto_cancel_expired_orders($pdo);
