import assert from "node:assert/strict";

import {
  formatReturnDeliveryLineLabel,
  formatReturnReworkItemLabel,
  formatReturnTraceSummary
} from "../src/utils/returnTraceFormatters.js";

const deliveryLine = {
  delivery_no: "DLV-NB-20260603-02600003-001",
  customer_name: "比得金属有限公司",
  product_code: "产品需规00091",
  product_name: "钢制碗",
  lot_no: "FGL-NB-20260602-产品需规00091-需规00091001-L01",
  source_lot_no: "FGL-NB-20260602-产品需规00091-需规00091001-L01",
  source_material_code: "原材料00002",
  source_material_name: "5系钢板",
  source_material_lot_no: "JH_5系钢板00002_0001",
  source_material_sub_batch_no: "JH_5系钢板00002_0001",
  returnable_qty: 150,
  returnable_weight_kg: 75
};

const label = formatReturnDeliveryLineLabel(deliveryLine);
assert.equal(
  label,
  "比得金属有限公司 · 钢制碗 · 原材料00002 · 5系钢板 · JH_5系钢板00002_0001 · 可退 150 / 75 kg"
);
assert.doesNotMatch(label, /DLV/i, "delivery line option should not expose delivery document numbers");
assert.doesNotMatch(label, /FGL/i, "delivery line option should not expose finished stock lot numbers");

const summary = formatReturnTraceSummary(deliveryLine);
assert.equal(
  summary,
  "客户：比得金属有限公司；产品：钢制碗；原材料库存批次：原材料00002 · 5系钢板 · JH_5系钢板00002_0001；可退：150 / 75 kg"
);
assert.doesNotMatch(summary, /DLV/i, "return trace summary should not expose delivery document numbers");
assert.doesNotMatch(summary, /FGL/i, "return trace summary should not expose finished stock lot numbers");

console.log("return delivery line label checks passed");

const reworkItem = {
  return_no: "RTN-NB-20260603-比得-001",
  delivery_no: "DLV-NB-20260603-02600003-002",
  product_code: "产品需规00091",
  product_name: "钢制碗",
  source_lot_no: "RTL-NB-20260603-0260603比得001-001",
  source_material_code: "原材料00002",
  source_material_name: "5系钢板",
  source_material_lot_no: "JH_5系钢板00002_0001",
  source_material_sub_batch_no: "JH_5系钢板00002_0001",
  return_qty: 20,
  return_weight_kg: 24
};

const reworkLabel = formatReturnReworkItemLabel(reworkItem);
assert.equal(
  reworkLabel,
  "钢制碗 · 原材料00002 · 5系钢板 · JH_5系钢板00002_0001 · 可返工 20 / 24 kg"
);
assert.doesNotMatch(reworkLabel, /RTN/i, "rework item option should not expose return document numbers");
assert.doesNotMatch(reworkLabel, /DLV/i, "rework item option should not expose delivery document numbers");
assert.doesNotMatch(reworkLabel, /RTL/i, "rework item option should not expose return warehouse internal lot numbers");
assert.match(reworkLabel, /JH_5系钢板00002_0001/, "rework item option should show raw-material stock lot number");
