#!/usr/bin/env npx tsx
/**
 * Combine individual deck JSONs into a single multi-deck presentation.
 *
 * Usage:
 *   npx tsx scripts/combine.ts [deck-id ...]
 *
 * If deck IDs are provided, they define the order.
 * Otherwise, all JSONs in generated/ are combined alphabetically.
 */

import * as fs from 'fs';
import * as path from 'path';

const generatedDir = path.resolve(__dirname, '..', 'generated');

const args = process.argv.slice(2);
let deckIds: string[];

if (args.length > 0) {
  deckIds = args;
} else {
  deckIds = fs.readdirSync(generatedDir)
    .filter(f => f.endsWith('.json') && f !== 'stemedb.json')
    .map(f => f.replace('.json', ''))
    .sort();
}

if (deckIds.length === 0) {
  console.error('No deck JSON files found in generated/');
  process.exit(1);
}

const decks = [];
for (const id of deckIds) {
  const filePath = path.join(generatedDir, `${id}.json`);
  if (!fs.existsSync(filePath)) {
    console.error(`Deck not found: ${filePath}`);
    process.exit(1);
  }
  const content = fs.readFileSync(filePath, 'utf-8');
  decks.push(JSON.parse(content));
}

const combined = {
  combined: true,
  meta: { id: 'stemedb', title: 'stemedb' },
  decks,
};

const outputPath = path.join(generatedDir, 'stemedb.json');
fs.writeFileSync(outputPath, JSON.stringify(combined, null, 2));
console.log(`Generated: ${outputPath} (${decks.length} decks)`);
