import json
import re
import sys
from pathlib import Path
import subprocess

# Ensure UTF-8 output
sys.stdout.reconfigure(encoding='utf-8')

root = Path(r"c:\Projects\FreeExile")
catalog_file = root / "client" / "webapp" / "js" / "data" / "i18n_catalog.js"
escaped_path = str(catalog_file).replace("\\", "/")

node_script = """
const fs = require('fs');
const code = fs.readFileSync('""" + escaped_path + """', 'utf-8');
const fakeWindow = {};
const fn = new Function('window', code + '; return I18N_CATALOG;');
const catalog = fn(fakeWindow);
console.log(JSON.stringify(catalog));
"""

res = subprocess.run(["node", "-e", node_script], capture_output=True, encoding="utf-8", check=True)
catalog = json.loads(res.stdout)

print(f"Loaded catalog locales: {list(catalog.keys())}")
for loc, entries in catalog.items():
    print(f"Locale {loc}: {len(entries)} keys")

# Check all unique keys
all_keys = set()
for loc, entries in catalog.items():
    all_keys.update(entries.keys())
print(f"\nTotal unique keys in catalog: {len(all_keys)}")

# Missing keys per locale
print("\n--- Missing Keys Analysis ---")
for loc in ["vi", "en", "zh", "ja", "ko", "th", "de", "ru", "es"]:
    missing = all_keys - set(catalog.get(loc, {}).keys())
    print(f"Locale {loc}: present={len(catalog.get(loc, {}))}, missing={len(missing)}")

# Analyze bilingual patterns like 'A (B)' or parentheses in values
print("\n--- Parentheses / Bilingual 'A (B)' Strings ---")
paren_pattern = re.compile(r"\(.*?\)")
for loc in ["vi", "en", "zh", "ja", "ko", "th", "de", "ru", "es"]:
    entries = catalog.get(loc, {})
    bilingual_entries = []
    for k, v in entries.items():
        if isinstance(v, str) and paren_pattern.search(v):
            bilingual_entries.append((k, v))
    print(f"\n=== Locale {loc}: {len(bilingual_entries)} strings with parentheses ===")
    for k, v in bilingual_entries:
        print(f"   [{k}]: {v}")
