#!/usr/bin/env node

/**
 * Development helper script for Insertr
 * Provides common development tasks and utilities
 */

import { execSync, spawn } from 'child_process';
import fs from 'fs';
import path from 'path';

const commands = {
  serve: {
    description: 'Start full-stack development (demo + API server)',
    action: () => {
      console.log('🚀 Starting Full-Stack Insertr Development...');
      console.log('📂 Demo site: http://localhost:3000');
      console.log('🔌 API server: http://localhost:8080');
      console.log('💾 Content persistence: ENABLED');
      console.log('\n⚠️  This command uses justfile orchestration - redirecting to "just dev-full"...\n');
      
      // Use justfile for proper orchestration
      const { execSync } = require('child_process');
      try {
        execSync('just dev-full', { stdio: 'inherit' });
      } catch (error) {
        console.log('\n💡 Alternative: Start components separately:');
        console.log('   Terminal 1: just server');
        console.log('   Terminal 2: just demo-only');
        process.exit(1);
      }
    }
  },

  check: {
    description: 'Check project status and validate setup',
    action: () => {
      console.log('🔍 Checking Insertr project status...\n');
      
      // Check files exist
      const requiredFiles = [
        'demos/demo-site/index.html',
        'demos/demo-site/about.html', 
        'lib/dist/insertr.js',
        'lib/dist/insertr.min.js',
        'cmd/serve.go',
        'package.json'
      ];

      const optionalFiles = [
        'insertr'
      ];
      
      let allGood = true;
      
      requiredFiles.forEach(file => {
        if (fs.existsSync(file)) {
          console.log('✅', file);
        } else {
          console.log('❌', file, '(missing)');
          allGood = false;
        }
      });
      
      // Check optional files
      console.log('\n📦 Build artifacts:');
      optionalFiles.forEach(file => {
        if (fs.existsSync(file)) {
          console.log('✅', file, '(built)');
        } else {
          console.log('⚪', file, '(not built - run "just build")');
        }
      });

      if (allGood) {
        console.log('\n🎉 All core files present!');
        console.log('\n📊 Project stats:');
        
        // Count editable elements
        const indexContent = fs.readFileSync('demos/demo-site/index.html', 'utf8');
        const aboutContent = fs.readFileSync('demos/demo-site/about.html', 'utf8');
        const insertrMatches = (indexContent + aboutContent).match(/class="insertr"/g) || [];
        console.log(`   📝 Editable elements: ${insertrMatches.length}`);
        
        // Check library size
        const libSize = fs.statSync('lib/dist/insertr.js').size;
        console.log(`   📦 Library size: ${(libSize / 1024).toFixed(1)}KB`);
        
        console.log('\n🚀 Development options:');
        console.log('   npm run dev     - Full-stack development (recommended)');
        console.log('   just dev        - Full-stack development (recommended)'); 
        console.log('   just demo-only  - Demo site only (no persistence)');
        console.log('   just server     - API server only (localhost:8080)');
        console.log('\n💡 Primary workflow: npm run dev or just dev');
      } else {
        console.log('\n❌ Some files are missing. Please check your setup.');
        process.exit(1);
      }
    }
  },

  demo: {
    description: 'Show demo instructions',
    action: () => {
      console.log('🎬 Insertr Demo Instructions\n');
       console.log('1. 🌐 Start server: npm run serve');
      console.log('2. 👀 Customer view: Browse the site normally');
      console.log('3. 🔑 Client login: Click "Login as Client"');
      console.log('4. ✏️  Edit mode: Click "Edit Mode: Off" to enable editing');
      console.log('5. 📝 Edit content: Click any ✏️ button to edit');
      console.log('6. 🔄 Try different content types (simple text vs rich markdown)');
      console.log('7. 📄 Multi-page: Navigate to About page to see persistence\n');
      console.log('🎯 Key features to test:');
      console.log('   • Inline text editing');
      console.log('   • Markdown editing for rich content');
      console.log('   • Auto-save with visual feedback');
      console.log('   • Content persistence across pages');
      console.log('   • Responsive design on mobile\n');
    }
  }
};

// Parse command line arguments
const command = process.argv[2] || 'help';

if (commands[command]) {
  commands[command].action();
} else if (command === 'help' || command === '--help' || command === '-h') {
  console.log('🛠️  Insertr Development Helper\n');
  console.log('Available commands:\n');
  Object.entries(commands).forEach(([name, cmd]) => {
    console.log(`  ${name.padEnd(12)} ${cmd.description}`);
  });
  console.log('\nUsage: node scripts/dev.js <command>');
  console.log('   or: npm run check\n');
} else {
  console.log(`❌ Unknown command: ${command}`);
  console.log('Run: node scripts/dev.js help');
  process.exit(1);
}