// Lowmoor 日本語化 — ビルド一括実行
//
//   node build-ja.mjs
//
// 前提: app/game/index.html（あなたのゲームから展開したもの）が置いてあること。
// やること: 静的HTMLの位置抽出 → 訳文の適用 → build/index.html を出力。
// DeepL の文字数は一切消費しません（tm.json から読むだけ）。
import { execFileSync } from 'node:child_process';
import fs from 'node:fs';

const SRC = 'app/game/index.html';

if (!fs.existsSync(SRC)) {
  console.error(`
[!] ${SRC} が見つかりません。

  先に、あなたが所有している Lowmoor から app.asar を展開してください:

    npx @electron/asar extract "<ゲームフォルダ>/resources/app.asar" ./app

  ゲームフォルダの例:
    C:\\Program Files (x86)\\Steam\\steamapps\\common\\Lowmoor Idle RPG An Adventurer's Chronicle

  ブラウザ版 / itch.io 版の index.html を使う場合は、
  app/game/index.html の位置に置けばそのまま通ります。
`);
  process.exit(1);
}

const run = (script) => {
  console.log(`\n--- ${script} ---`);
  execFileSync(process.execPath, [script], { stdio: 'inherit' });
};

// 静的HTML側の位置情報を作り直す。ゲームが更新されて行がずれても、
// ここをやり直せば tm.json の既訳はそのまま効く。
run('extract-html.mjs');

// 訳文を差し戻す。検証に落ちたものは英語のまま残る（壊れた日本語を出さない方針）。
run('patch.mjs');

// ブラウザAPIの列挙値が訳されていないかを、出来上がりに対して調べる。
//
// **1.6.1 対応版で音が全部消えた原因がこれだった。**
//   audioCtx.state === "running" → 「流れる」  … 比較が永久に偽になる
//   tone.type = "lowpass"        → 「ローパス」… 代入で例外
// どちらも構文は通り、lint も素通りし、画面も普通に出る。音だけが消える。
// 静的検査を1枚挟んでおかないと、同じ壊れ方に次の綴りで気づけない。
run('apienum.mjs');

console.log(`
--- 完了 ---
  build/index.html ができました。

  Steam版に入れる場合は、この index.html を app/game/index.html に上書きしてから
  asar に詰め直してください（../適用する.ps1 が自動でやります）。

  ブラウザで動作を見るだけなら build/index.html をそのまま開けます。
`);
