#!/usr/bin/env node
// Generates src/services/oref-locations.ts from eladnava/pikud-haoref-api cities.json
// Source: https://github.com/eladnava/pikud-haoref-api
// Run: node scripts/generate-oref-locations.mjs

import { writeFileSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';

const COMMIT_SHA = 'master';
const CITIES_URL = `https://raw.githubusercontent.com/eladnava/pikud-haoref-api/${COMMIT_SHA}/cities.json`;

const __dirname = dirname(fileURLToPath(import.meta.url));
const OUTPUT = join(__dirname, '..', 'src', 'services', 'oref-locations.ts');

function normalize(s) {
  return s.normalize('NFKC').trim().replace(/\s+/g, ' ');
}

async function main() {
  console.log('Fetching cities.json...');
  const res = await fetch(CITIES_URL);
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const cities = await res.json();

  const map = new Map();
  for (const c of cities) {
    if (!c.name || !c.name_en || c.id === 0) continue;
    const key = normalize(c.name);
    if (!map.has(key)) map.set(key, c.name_en);
    // Also add zone translations
    if (c.zone && c.zone_en) {
      const zoneKey = normalize(c.zone);
      if (!map.has(zoneKey)) map.set(zoneKey, c.zone_en);
    }
  }

  const sorted = [...map.entries()].sort((a, b) => a[0].localeCompare(b[0], 'he'));

  const lines = [
    '// Auto-generated by scripts/generate-oref-locations.mjs',
    '// Source: https://github.com/eladnava/pikud-haoref-api/blob/master/cities.json',
    `// Generated: ${new Date().toISOString().slice(0, 10)}`,
    `// Entries: ${sorted.length}`,
    '',
    'const OREF_LOCATIONS: Record<string, string> = {',
  ];

  for (const [heb, eng] of sorted) {
    const escapedKey = heb.replace(/'/g, "\\'");
    const escapedVal = eng.replace(/'/g, "\\'");
    lines.push(`  '${escapedKey}': '${escapedVal}',`);
  }

  lines.push('};');
  lines.push('');
  lines.push('export function translateLocation(hebrew: string): string {');
  lines.push("  if (!hebrew) return hebrew;");
  lines.push("  const key = hebrew.normalize('NFKC').trim().replace(/\\s+/g, ' ');");
  lines.push('  return OREF_LOCATIONS[key] ?? hebrew;');
  lines.push('}');
  lines.push('');

  writeFileSync(OUTPUT, lines.join('\n'));
  console.log(`Wrote ${sorted.length} entries to ${OUTPUT}`);
}

main().catch(e => { console.error(e); process.exit(1); });
