# Controllers - Structure organisée par projets

Cette organisation des controllers Stimulus suit une structure claire par projets, permettant une meilleure séparation des responsabilités et une maintenance facilitée.

## 📁 Structure

```
controllers/
├── shared/              # Controllers et composants communs à tous les projets (8 fichiers)
├── moodia/             # Projet Moodia - Génération de cours Moodle (13 fichiers)
├── seren_ia/           # Projet Seren IA - Assistant IA conversationnel (7 fichiers)
├── slidia/             # Projet Slidia - Génération de présentations (1 fichier)
└── dev/                # Outils de développement (1 fichier)
```

## 🔧 Controllers et composants partagés (`shared/`)

Controllers et composants réutilisables utilisés dans plusieurs projets ou de manière globale dans l'application.

### Controllers

| Fichier | Description |
|---------|-------------|
| `notification_controller.js` | Système de notifications toast global |
| `sidebar_controller.js` | Gestion du sidebar de navigation |
| `csrf_protection_controller.js` | Protection CSRF pour les requêtes AJAX |
| `feedback_controller.js` | Modal de feedback utilisateur |
| `wysiwyg_controller.js` | Éditeur WYSIWYG (Trix) |
| `bubble_cursor_controller.js` | Effet de curseur animé |
| `settings_tabs_controller.js` | Gestion des onglets de paramètres |

### Composants

| Fichier | Description |
|---------|-------------|
| `TokenAnimationManager.js` | Gestionnaire d'animations pour tokens et énergie |

## 📚 Projet Moodia (`moodia/`)

Génération et gestion de cours Moodle à partir de PDF.

### Controllers principaux

| Fichier | Description |
|---------|-------------|
| `stepper_controller.js` | Orchestration des 5 étapes de création |
| `step_1_upload_controller.js` | Upload du fichier PDF |
| `step_2_parameters_controller.js` | Configuration des paramètres |
| `step_3_analysis_controller.js` | Analyse et génération IA |
| `step_4_preview_controller.js` | Prévisualisation et édition |
| `step_5_deploy_controller.js` | Déploiement sur Moodle |

### Controllers d'édition

| Fichier | Description |
|---------|-------------|
| `activity-editor_controller.js` | Édition des activités (713 lignes) |
| `section-editor_controller.js` | Édition des sections |
| `quiz-editor_controller.js` | Éditeur de quiz |
| `activity_tags_controller.js` | Gestion des tags d'activités |
| `activity_type_dropdown_controller.js` | Dropdown de sélection de type |

### Controllers utilitaires

| Fichier | Description |
|---------|-------------|
| `modals_controller.js` | Gestion des modals (confirmations, etc.) |
| `course_toc_controller.js` | Table des matières du cours |
| `user-search_controller.js` | Recherche d'utilisateurs |

## 🤖 Projet Seren IA (`seren_ia/`)

Assistant conversationnel IA avec génération de texte, d'images et gestion de fichiers.

| Fichier | Description |
|---------|-------------|
| `chat_controller.js` | Controller principal du chat |
| `FileUploadManager.js` | Gestion des uploads de fichiers |
| `ImageGenerator.js` | Génération d'images via IA |
| `MarkdownRenderer.js` | Rendu Markdown avec syntaxe |
| `MessageBuilder.js` | Construction des messages |
| `NotificationManager.js` | Notifications dans le chat |
| `Utils.js` | Utilitaires du chat |

## 📊 Projet Slidia (`slidia/`)

Génération automatique de présentations PowerPoint.

| Fichier | Description |
|---------|-------------|
| `generator_controller.js` | Génération de slides avec IA |

## 🛠️ Outils de développement (`dev/`)

| Fichier | Description |
|---------|-------------|
| `tokens_controller.js` | Gestion des tokens API pour les tests |

## 📝 Conventions d'import

### Depuis `shared/`
```javascript
import { ... } from '../../javascript/utils/...';
```

### Depuis `moodia/`, `seren_ia/`, `slidia/`, `dev/`
```javascript
import { ... } from '../../javascript/utils/...';
```

## 🎯 Bonnes pratiques

1. **Placement des nouveaux controllers** :
   - Si utilisé par plusieurs projets → `shared/`
   - Si spécifique à un projet → dossier du projet correspondant
   - Si outil de dev/debug → `dev/`

2. **Naming** :
   - Format : `nom_controller.js` (snake_case)
   - Descriptif et explicite
   - Suffixe `_controller` obligatoire

3. **Structure interne** :
   - Suivre le style établi (voir `javascript/utils/README.md`)
   - Header standardisé avec description
   - Sections commentées (CONFIG, LIFECYCLE, ACTIONS, HELPERS)

4. **Imports** :
   - Toujours utiliser les utilitaires de `javascript/utils/`
   - Éviter la duplication de code
   - Chemins relatifs corrects selon le niveau de dossier

## 📊 Statistiques

- **30 fichiers au total**
- **8** fichiers partagés (7 controllers + 1 composant)
- **13** controllers Moodia
- **7** fichiers Seren IA (1 controller + 6 classes utilitaires)
- **1** controller Slidia
- **1** controller Dev

## 🚀 Évolutivité

Pour ajouter un nouveau projet, créez un nouveau dossier au même niveau :

```
controllers/
├── shared/
├── moodia/
├── seren_ia/
├── slidia/
├── mon_nouveau_projet/    ← Nouveau projet
│   └── ...
└── dev/
```

Assurez-vous d'utiliser les imports `../../javascript/utils/` pour accéder aux utilitaires partagés.
