# Class Generator 2.0

**Educational Games Platform with Ultra-Modular Architecture**

A complete rewrite of the Class Generator system using strict modular design patterns, vanilla JavaScript, and rigorous separation of concerns.

## 🚀 Quick Start

### Method 1: Batch File (Windows)
```bash
# Double-click or run:
start.bat
```

### Method 2: Command Line
```bash
# Install Node.js (if not already installed)
# Then run:
node server.js

# Or using npm:
npm start
```

### Method 3: NPM Scripts
```bash
npm run dev     # Start development server
npm run serve   # Same as start
```

**Server will start on:** `http://localhost:3000`

## 🏗️ Architecture Overview

### Core System (Ultra-Rigid)

- **Module.js** - Abstract base class with sealed instances and WeakMap privates
- **EventBus.js** - Strict event system with validation and type safety
- **ModuleLoader.js** - Dependency injection with proper initialization order
- **Router.js** - Navigation with guards, middleware, and state management
- **Application.js** - Bootstrap system with auto-initialization

### Key Architecture Principles

✅ **Inviolable Responsibility** - Each module has exactly one purpose
✅ **Zero Direct Dependencies** - All communication via EventBus
✅ **Sealed Instances** - Modules cannot be modified after creation
✅ **Private State** - Internal data completely inaccessible
✅ **Contract Enforcement** - Abstract methods must be implemented
✅ **Dependency Injection** - No global access, everything injected

## 📁 Project Structure

```
├── src/
│   ├── core/           # Core system modules (sealed)
│   │   ├── Module.js
│   │   ├── EventBus.js
│   │   ├── ModuleLoader.js
│   │   ├── Router.js
│   │   └── index.js
│   ├── components/     # Reusable UI components
│   ├── games/          # Game modules
│   ├── content/        # Content modules
│   ├── styles/         # Modular CSS
│   └── Application.js  # Main application bootstrap
├── Legacy/             # Old system (archived)
├── index.html         # Entry point
├── server.js          # Development server
├── start.bat          # Windows quick start
└── package.json       # Node.js configuration
```

## 🔥 Features

### Development Server
- **ES6 Modules** - Full import/export support
- **CORS Enabled** - For online communication
- **Hot Reload Ready** - Manual refresh (planned: auto-refresh)
- **Proper MIME Types** - All file types supported
- **Security Headers** - Basic security implemented

### Application System
- **Auto-Start** - No commands needed, just open in browser
- **Loading Screen** - Elegant initialization feedback
- **Debug Panel** - F12 to toggle, shows system status
- **Error Handling** - Graceful error recovery
- **Network Status** - Real-time connectivity indicator

### Module System
- **Strict Validation** - Errors if contracts violated
- **Lifecycle Management** - Proper init/destroy patterns
- **Event-Driven** - Loose coupling via events
- **Dependency Resolution** - Automatic dependency loading

## 🎮 Creating Game Modules

```javascript
import Module from '../core/Module.js';

class MyGame extends Module {
    constructor(name, dependencies, config) {
        super(name, ['eventBus', 'ui']);

        this._eventBus = dependencies.eventBus;
        this._ui = dependencies.ui;
        this._config = config;
    }

    async init() {
        // Initialize game
        this._eventBus.on('game:start', this._handleStart.bind(this), this.name);
        this._setInitialized();
    }

    async destroy() {
        // Cleanup
        this._setDestroyed();
    }

    _handleStart(event) {
        // Game logic here
    }
}

export default MyGame;
```

## 🧩 Adding to Application

```javascript
// In Application.js modules config:
{
    name: 'myGame',
    path: './games/MyGame.js',
    dependencies: ['eventBus', 'ui'],
    config: { difficulty: 'easy' }
}
```

## 🐛 Debugging

### Debug Panel (F12)
- System status and uptime
- Loaded modules list
- Event history
- Performance metrics

### Console Access
```javascript
// Global app instance available in console:
window.app.getStatus()           // Application status
window.app.getCore().eventBus    // Access EventBus
window.app.getCore().router      // Access Router
```

### Common Issues

**Module loading fails:**
- Check file paths in Application.js
- Verify module extends Module base class
- Ensure all dependencies are listed

**Events not working:**
- Verify module is registered with EventBus
- Check event type strings match exactly
- Ensure module is initialized before emitting

## 🔒 Security & Rigidity

The architecture enforces several levels of protection:

1. **Sealed Classes** - `Object.seal()` prevents property addition/deletion
2. **Frozen Prototypes** - `Object.freeze()` prevents method modification
3. **WeakMap Privates** - Internal state completely hidden
4. **Abstract Enforcement** - Missing methods throw errors
5. **Validation Layers** - Input validation at every boundary

**Violation attempts will throw explicit errors with helpful messages.**

## 🚀 Next Steps

1. **Create Game Modules** - Implement actual games using new architecture
2. **Add Content System** - Port content loading from Legacy system
3. **UI Components** - Build reusable component library
4. **Performance** - Add lazy loading and caching
5. **Testing** - Add automated test suite

## 📝 Migration from Legacy

The Legacy/ folder contains the complete old system. Key differences:

- **Old:** Global variables and direct coupling
- **New:** Strict modules with dependency injection

- **Old:** CSS modifications in global files
- **New:** Component-scoped CSS injection

- **Old:** Manual module registration
- **New:** Automatic loading with dependency resolution

---

**Built with strict architectural principles for maintainable, scalable educational software.**