// gap-todo.json を PLaMo に通し、tm.json へ書き戻す。
import fs from 'fs';

const GW = 'http://127.0.0.1:8080';
const todo = JSON.parse(fs.readFileSync('gap-todo.json', 'utf8'));

// 明らかに訳す対象でないものを、ここでもう一度落とす
const skip = s =>
  /^(use strict|text\/plain|application\/json|FIELDSET|apikey|nocrit|sealend|petgood|chron|tr\.cur|vastianterms|misiamisiamisia)$/.test(s) ||
  /^(GNOME 1|Mac OS 8|Windows 98)(:)?$/.test(s) ||          // デスクの意匠名。原語のままが正しい
  /^(reach|weight|thrift)\.[a-z]$/.test(s) ||                // 才能ツリーの id
  /^[\d\s.px]+$/.test(s) ||
  /^lg-|^armfiltword |class='|data-help=|data-opt=|,height=|popup=yes|utm_source|translateX\(/.test(s) ||
  /^display:|^font-family:|^<!doctype/i.test(s);

const list = todo.filter(s => !skip(s));
console.log(`gap-todo ${todo.length} 件 → 訳す ${list.length} 件（除外 ${todo.length - list.length} 件）`);

const t0 = Date.now();
const res = await fetch(GW + '/api/translate/batch', {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({ texts: list, profile: 'game', concurrency: 1 }),
});
if (!res.ok) { console.error('ゲートウェイ応答', res.status, await res.text()); process.exit(1); }
const out = await res.json();
console.log('統計:', JSON.stringify(out.stats), `${Math.round((Date.now() - t0) / 1000)}秒`);

const tm = JSON.parse(fs.readFileSync('tm.json', 'utf8'));
let added = 0, warned = [];
out.results.forEach((r, i) => {
  const en = list[i];
  if (!r || r.error || !r.text) { warned.push([en, r && (r.error || '空')]); return; }
  if (r.warning) { warned.push([en, r.warning + ' -> ' + r.text]); return; }
  if (!/[ぁ-んァ-ヴ一-龯]/.test(r.text)) { warned.push([en, '日本語になっていない -> ' + r.text]); return; }
  tm[en] = r.text; added++;
});
fs.writeFileSync('tm.json', JSON.stringify(tm, null, 1));
console.log(`tm.json に ${added} 件を追加。要確認 ${warned.length} 件。`);
fs.writeFileSync('gap-warned.json', JSON.stringify(warned, null, 1));

console.log('\n--- 訳の抜粋（40件） ---');
out.results.slice(0, 40).forEach((r, i) => {
  if (r && r.text) console.log(`  ${JSON.stringify(list[i]).slice(0, 46).padEnd(48)} → ${r.text.slice(0, 50)}`);
});
if (warned.length) {
  console.log('\n--- 要確認 ---');
  warned.slice(0, 20).forEach(([en, w]) => console.log(`  ${JSON.stringify(en).slice(0, 50)}  ${String(w).slice(0, 60)}`));
}
