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

const root = process.cwd();

function readSource(relativePath) {
  return readFileSync(path.join(root, relativePath), "utf8");
}

const app = readSource("src/App.vue");
const router = readSource("src/router/index.js");
const workspace = readSource("src/views/ProductionWorkspaceView.vue");
const operationReports = readSource("src/views/OperationReportView.vue");
const inventoryLedger = readSource("src/views/InventoryLedgerView.vue");

assert.doesNotMatch(
  app,
  /key:\s*"scrap-rework"[\s\S]*?label:\s*"生产报废"/,
  "production side menu should not expose the production scrap entry"
);
assert.doesNotMatch(
  app,
  /routeNames:\s*\[[\s\S]*?"scrap-rework"[\s\S]*?\]/,
  "production module route activation should not include scrap-rework"
);
assert.doesNotMatch(
  app,
  /permissionsAny:\s*\[[\s\S]*?"MENU_SCRAP_REWORK"[\s\S]*?\]/,
  "production module permissions should not depend on the hidden scrap entry"
);

assert.doesNotMatch(
  router,
  /const productionPermissionOrder = \[[\s\S]*?routeName:\s*"scrap-rework"/,
  "production permission order should not choose the production scrap route"
);

assert.doesNotMatch(workspace, /ScrapReworkView/, "production workspace should not import the scrap page");
assert.doesNotMatch(workspace, /label:\s*"生产报废"/, "production workspace should not show a production scrap card");
assert.match(workspace, /title="生产台账与小程序报工"/, "production workspace title should describe the remaining production entries");
assert.match(workspace, /生产台账/, "production workspace should keep the production ledger wording");

assert.match(operationReports, /报废数量/, "operation report page should still keep reported scrap quantity");
assert.match(inventoryLedger, /生产废料入库/, "scrap warehouse production scrap inbound should remain available");

console.log("production scrap entry hidden checks passed");
