import assert from "node:assert/strict";
import fs from "node:fs";
import path from "node:path";

const source = fs.readFileSync(path.resolve("src/views/InventoryLedgerView.vue"), "utf8");
const backendInventorySource = fs.readFileSync(path.resolve("../backend/app/api/routes/inventory.py"), "utf8");

assert.match(
  source,
  /const isOutsourcingScrapInbound = computed\(\(\) =>[\s\S]*activeWarehouseType\.value === "SCRAP"[\s\S]*activeOperation\.value\?\.bizType === "OUTSOURCING_SCRAP_IN"/,
  "outsourcing scrap inbound should have an explicit state flag"
);

assert.match(
  source,
  /isProductTraceOnlySourceLotInbound\.value \|\| isOutsourcingScrapInbound\.value/,
  "outsourcing scrap inbound should use the product-to-raw-material source lot selector"
);

assert.match(
  source,
  /!isFinishedOutsourcingInbound && !isProductionScrapInbound && !isOutsourcingScrapInbound/,
  "outsourcing scrap inbound should hide the manual lot number field"
);

assert.match(
  source,
  /:allow-unavailable="isSourceLotReturnInbound \|\| isSemiSourceLotTraceInbound \|\| isOutsourcingScrapInbound"/,
  "outsourcing scrap inbound should show both available and unavailable raw-material source lots"
);

assert.match(
  source,
  /isProductTraceOnlySourceLotInbound\.value \|\| isOutsourcingScrapInbound\.value[\s\S]*\? selectedTraceSourceLotNos/,
  "outsourcing scrap inbound should submit source lot numbers through source material trace fields"
);

assert.match(
  backendInventorySource,
  /is_outsourcing_scrap_source_lot_trace_inbound\s*=\s*warehouse_type == "SCRAP" and biz_type == "OUTSOURCING_SCRAP_IN"/,
  "backend should classify outsourcing scrap inbound as product raw-material source lot trace inbound"
);

assert.match(
  backendInventorySource,
  /is_product_raw_source_lot_trace_inbound = \([\s\S]*is_outsourcing_scrap_source_lot_trace_inbound[\s\S]*\)/,
  "backend should validate selected raw-material source lots for outsourcing scrap inbound"
);

console.log("outsourcing scrap inbound source lot checks passed");
