// CSS の値として使われている文字列が訳されていないか調べる。
//
// clip-path に渡す "inset(0 " が「インセット(0」になって、ゲージの塗りが
// 出なくなった。構文は通り、lint も通り、実行しても例外にならない。
// ブラウザが値を捨てるだけなので、画面を見るまで分からない類の壊れ方。
import fs from 'fs';

const src = fs.readFileSync('app/game/index.html', 'utf8');
const tm = JSON.parse(fs.readFileSync('tm.json', 'utf8'));
const ov = JSON.parse(fs.readFileSync('overrides.json', 'utf8'));
for (const k in ov) if (!k.startsWith('_')) tm[k] = ov[k];

// CSS の関数・単位・プロパティらしさ
const CSS_FUNC = /^\s*(inset|translate[XYZ3d]*|scale[XYZ3d]*|rotate[XYZ3d]*|skew|matrix3?d?|perspective|calc|min|max|clamp|rgba?|hsla?|var|url|attr|linear-gradient|radial-gradient|conic-gradient|repeating-linear-gradient|blur|brightness|contrast|drop-shadow|grayscale|invert|opacity|saturate|sepia|hue-rotate|cubic-bezier|steps|polygon|circle|ellipse|path|counter|env|color-mix)\s*\(/i;
const CSS_DECL = /^[a-z-]+\s*:\s*[^;]/;                  // "width: 12px"
const CSS_UNIT = /^-?[\d.]+(px|%|em|rem|vh|vw|svh|deg|ms|s|fr|ch)\b/;

const hits = [];
for (const [en, ja] of Object.entries(tm)) {
  if (en === ja) continue;
  if (CSS_FUNC.test(en) || CSS_DECL.test(en) || CSS_UNIT.test(en)) hits.push([en, ja]);
}
console.log(`CSS の値らしいのに訳されている文字列: ${hits.length} 件`);
hits.forEach(([en, ja]) => console.log(`  ${JSON.stringify(en.slice(0, 60))}\n    -> ${JSON.stringify(ja.slice(0, 60))}`));

// ついでに、ビルド済みファイルの中で style へ渡る式に日本語が混ざっていないか
const built = fs.existsSync('build/index.html') ? fs.readFileSync('build/index.html', 'utf8') : '';
const JA = '[ぁ-んァ-ヶ一-龥]';
const styleStmt = new RegExp('\\.style\\.[\\w]+\\s*=[^;\\n]{0,200}?' + JA, 'g');
const setProp = new RegExp('setProperty\\([^;\\n]{0,200}?' + JA, 'g');
const cssText = new RegExp('cssText\\s*=[^;\\n]{0,200}?' + JA, 'g');
for (const [name, re] of [['style.X =', styleStmt], ['setProperty', setProp], ['cssText', cssText]]) {
  const m = built.match(re) || [];
  if (m.length) {
    console.log(`\nビルド内 ${name}: ${m.length} 件`);
    [...new Set(m)].slice(0, 10).forEach(x => console.log('   ' + x.replace(/\s+/g, ' ').slice(0, 110)));
  }
}
fs.writeFileSync('css-hits.json', JSON.stringify(hits.map(h => h[0]), null, 1));
