import assert from "node:assert/strict";
import { readFileSync } from "node:fs";

const inventoryLedger = readFileSync(new URL("../src/views/InventoryLedgerView.vue", import.meta.url), "utf8");
const purchaseOrder = readFileSync(new URL("../src/views/PurchaseOrderView.vue", import.meta.url), "utf8");
const purchaseReceipt = readFileSync(new URL("../src/views/PurchaseReceiptView.vue", import.meta.url), "utf8");

assert.match(inventoryLedger, /const activeWeightOnly = computed\(\(\) => \["raw", "scrap"\]\.includes\(activeInventoryTab\.value\)\)/);
assert.match(inventoryLedger, /const selectedWeightOnly = computed\(\s*\(\) => \["RAW", "SCRAP"\]\.includes\(selectedWarehouseType\.value\)\s*\)/);
assert.match(inventoryLedger, /const activeQuantityOnly = computed\(\(\) => activeInventoryTab\.value === "auxiliary"\)/);
assert.match(inventoryLedger, /const selectedQuantityOnly = computed\(\(\) => selectedWarehouseType\.value === "AUX"\)/);
assert.match(inventoryLedger, /normalizeWarehouseType\(lot\) === "AUX"[\s\S]*return lotAvailableQty\(lot\) > 0/);
assert.match(inventoryLedger, /<th v-if="!activeQuantityOnly">现存重量\(kg\)<\/th>/);
assert.match(inventoryLedger, /<td v-if="!activeQuantityOnly">[\s\S]*formatWeight\(balance\.weight_on_hand_kg\)/);
assert.match(inventoryLedger, /<th v-if="!activeQuantityOnly">变动重量\(kg\)<\/th>/);
assert.match(inventoryLedger, /selectedQuantityOnly\.value[\s\S]*return "可用数量"/);
assert.match(inventoryLedger, /isSelectedFinishedWarehouse\.value \|\| selectedQuantityOnly\.value[\s\S]*key: "inbound_qty"/);
assert.match(inventoryLedger, /!\s*selectedQuantityOnly\.value \? \[\s*\{ key: "inbound_weight_kg"/);
assert.match(inventoryLedger, /activeWarehouseType\.value === "AUX"\s*\?\s*Number\(genericForm\.qty \|\| 0\)/);
assert.match(inventoryLedger, /辅料生产出库必须填写用途/);
assert.match(inventoryLedger, /activeWarehouseType === "AUX" \? "单价\(元\/件\)" : "单价\(元\/kg\)"/);
assert.match(inventoryLedger, /<th v-if="activeQuantityOnly">单位<\/th>/);
assert.match(inventoryLedger, /<td v-if="activeQuantityOnly">\{\{ formatInventoryUnitLabel\(balance\) \}\}<\/td>/);
assert.match(inventoryLedger, /searchFields: \["item_code", "item_name", "specification", "stock_unit_name", "purchase_unit_name", "sales_unit_name", "warehouse_name", "location_name", "operation_label", "source_material_summary"\]/);
assert.match(inventoryLedger, /const specificationLabel = balance\.specification \? ` · \$\{balance\.specification\}` : ""/);
assert.match(inventoryLedger, /const baseLabel = `\$\{balance\.item_code\} · \$\{balance\.item_name\}\$\{specificationLabel\}`/);
assert.match(inventoryLedger, /function formatInventoryUnitLabel\(item\)/);
assert.match(inventoryLedger, /计量单位：\(\[\^；;\]\+\)/);

assert.match(purchaseOrder, /v-model\.number="item\.order_qty"/);
assert.match(purchaseOrder, /order_qty: form\.target_warehouse_type === "AUX" \? Number\(item\.order_qty \|\| 0\) : 0/);
assert.match(purchaseOrder, /order_weight_kg: form\.target_warehouse_type === "AUX" \? 0 : Number\(item\.order_weight_kg \|\| 0\)/);
assert.match(purchaseOrder, /formatOrderTotal\(order\)/);
assert.match(purchaseOrder, /formatPurchaseUnitPriceDisplay\(row\)/);

assert.match(purchaseReceipt, /const selectedPurchaseTargetType = computed/);
assert.match(purchaseReceipt, /v-model\.number="item\.received_qty"/);
assert.match(purchaseReceipt, /received_qty: selectedPurchaseTargetType\.value === "AUX" \? Number\(item\.received_qty \|\| 0\) : 0/);
assert.match(purchaseReceipt, /received_weight_kg: selectedPurchaseTargetType\.value === "AUX" \? 0 : Number\(item\.received_weight_kg \|\| 0\)/);
assert.match(purchaseReceipt, /formatReceiptItemReceived\(row\)/);

console.log("辅料库数量口径前端静态检查通过");
