<?php
// ─── POST /api/stock/close-order.php ────────────────────────────────────
// Marks all outstanding stock in a booking order as USED and closes it.
define('ROOT', dirname(__DIR__, 2));
require_once ROOT . '/core/DB.php';
require_once ROOT . '/core/Response.php';
require_once ROOT . '/core/Auth.php';

Auth::require();
$db = DB::get();

$order_no = trim($_POST['order_no'] ?? '');
if (!$order_no) Response::error('order_no is required.');

// Get all line items for this order
$items = $db->rows(
    "SELECT bsl.stock_no, bsl.item_name, bsl.amount,
            COALESCE((SELECT SUM(quantity) FROM stock_trans
                      WHERE stock_no = bsl.stock_no AND status = 'RETURNED'
                      AND order_no = bsl.order_no), 0) AS returned_qty,
            COALESCE((SELECT SUM(quantity) FROM stock_trans
                      WHERE stock_no = bsl.stock_no AND status = 'USED'
                      AND order_no = bsl.order_no), 0) AS used_qty
     FROM   book_stock_list bsl
     WHERE  bsl.order_no = ?",
    [$order_no]
);

foreach ($items as $item) {
    $outstanding = max(0, (int)$item['amount'] - (int)$item['returned_qty'] - (int)$item['used_qty']);
    if ($outstanding > 0) {
        $db->run(
            "INSERT INTO stock_trans (stock_no, item_name, quantity, status, order_no)
             VALUES (?, ?, ?, 'USED', ?)",
            [$item['stock_no'], $item['item_name'], $outstanding, $order_no]
        );
    }
}

// Mark booking order as returned/closed
$db->run(
    "UPDATE book_stock SET status = 'returned', date_returned = ?
     WHERE  order_no = ?",
    [date('Y-m-d H:i'), $order_no]
);

Response::ok(null, 'Order closed successfully.');