#!/usr/bin/env node

/**
 * Script to generate the DSL parser from Peggy grammar
 */

import peggy from 'peggy';
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const grammarPath = path.join(__dirname, '../src/ast/grammar/dsl.peggy');
const outputPath = path.join(__dirname, '../src/ast/parser/GeneratedParser.js');

console.log('Generating DSL parser from Peggy grammar...');
console.log('Grammar:', grammarPath);
console.log('Output:', outputPath);

try {
  // Read the grammar file
  const grammar = fs.readFileSync(grammarPath, 'utf8');
  
  // Generate the parser
  const parserSource = peggy.generate(grammar, {
    format: 'es',
    output: 'source',
    grammarSource: 'dsl.peggy'
  });
  
  // Write the generated parser
  fs.writeFileSync(outputPath, parserSource);
  
  console.log('✅ Parser generated successfully!');
  console.log('Generated file:', outputPath);
  
} catch (error) {
  console.error('❌ Error generating parser:');
  console.error(error.message);
  
  if (error.format) {
    console.error('\nFormatted error:');
    console.error(error.format([
      { source: 'dsl.peggy', text: fs.readFileSync(grammarPath, 'utf8') }
    ]));
  }
  
  process.exit(1);
}
