#!/usr/bin/env node
/**
 * gen-symbol-viewer.mjs — generate <MPN>-symbol-viewer.html for one chip.
 *
 * Bypasses symbol-creator's HTTP service entirely. Pre-renders the symbol
 * SVG via LOCAL kicad-cli (gallia's HTTP route doesn't accept arbitrary
 * file uploads) and passes it directly to generateBrandedViewer via the
 * `svgContent` option. This sidesteps:
 *   - Port collisions (no localhost service required)
 *   - Stale env state on background symbol-creator processes
 *   - service-kicad's `/sym/export/svg` POST route not being implemented
 *     for arbitrary kicad_sym uploads (only `<library>/<name>` GETs work)
 *
 * Usage:
 *   node gen-symbol-viewer.mjs <library-dir>/<MPN>
 *
 * Writes <MPN>-symbol-viewer.html into the same dir.
 */

import { existsSync, mkdtempSync, readFileSync, readdirSync, writeFileSync, rmSync } from 'fs';
import { tmpdir } from 'os';
import { execFileSync } from 'child_process';
import { join, basename, resolve } from 'path';

const arg = process.argv[2];
if (!arg) {
  console.error('usage: gen-symbol-viewer.mjs <library-dir>/<MPN>');
  process.exit(2);
}

const dir = resolve(arg);
const mpn = basename(dir);
const symPath = join(dir, `${mpn}.kicad_sym`);
if (!existsSync(symPath)) {
  console.error(`ERROR: ${symPath} not found`);
  process.exit(1);
}

// ── Local SVG render via kicad-cli — same approach chip-thumbnailer uses ──
const tmp = mkdtempSync(join(tmpdir(), 'cf-symview-'));
try {
  execFileSync('kicad-cli', ['sym', 'export', 'svg', '--output', tmp, symPath], { stdio: 'pipe' });
} catch (e) {
  console.error('ERROR: kicad-cli sym export svg failed:', e.stderr?.toString() || e.message);
  rmSync(tmp, { recursive: true, force: true });
  process.exit(1);
}
const svgFile = readdirSync(tmp).find(f => f.endsWith('.svg'));
if (!svgFile) {
  console.error('ERROR: kicad-cli produced no svg in', tmp);
  rmSync(tmp, { recursive: true, force: true });
  process.exit(1);
}
const svgContent = readFileSync(join(tmp, svgFile), 'utf-8');
rmSync(tmp, { recursive: true, force: true });

// ── Build viewer HTML via gallia's generateBrandedViewer ──
const { generateBrandedViewer } = await import(
  '/home/adom/project/gallia/symbol-creator/lib/viewer-gen.js'
);

const infoPath = join(dir, 'info.json');
let info = {};
if (existsSync(infoPath)) {
  try { info = JSON.parse(readFileSync(infoPath, 'utf-8')); } catch {}
}

const html = await generateBrandedViewer(symPath, mpn, {
  pinDescriptions: {},
  groupDescriptions: {},
  datasheetUrl: info.datasheet_url && info.datasheet_url !== '?' ? info.datasheet_url : '',
  manufacturer: info.manufacturer && info.manufacturer !== '?' ? info.manufacturer : '',
  svgContent,
});

const outPath = join(dir, `${mpn}-symbol-viewer.html`);
writeFileSync(outPath, html);
console.log(`OK: ${outPath} (${html.length} bytes)`);