# Erreur Babele/LibWrapper - Analyse et Solution

## Contexte de l'Erreur

```
Error: Cannot read properties of null (reading 'isGM')
    at initWrapper (wrapper.js:8:62)
    at Object.fn (babele.js:19:5)
```

## Analyse

### Origine de l'Erreur

Cette erreur provient des modules **Babele** ou **LibWrapper**, PAS de nos DataModels. Elle se produit lorsque ces modules tentent d'accéder à `game.user.isGM` pendant le hook 'init', mais `game.user` est encore `null` à ce moment-là.

### Pourquoi `game.user` est null ?

Dans Foundry VTT, l'ordre d'initialisation est :
1. Hook 'init' - Configuration du système
2. Hook 'setup' - Préparation des données
3. Hook 'ready' - **C'est ici que `game.user` est disponible**

Pendant 'init', l'utilisateur n'est pas encore connecté, donc `game.user` est null.

### Lien avec les DataModels ?

Les DataModels eux-mêmes ne causent pas l'erreur, MAIS leur import au niveau module (top-level import) peut affecter le timing d'exécution et déclencher des problèmes de timing avec Babele/LibWrapper.

## Solution Appliquée

### Import Dynamique des DataModels

**AVANT** (import statique) :
```javascript
// Import DataModels
import * as models from "./models/_module.js";

Hooks.once("init", async function () {
  // ... utilise models
});
```

**APRÈS** (import dynamique) :
```javascript
Hooks.once("init", async function () {
  // Import DataModels dynamically to avoid timing issues
  const models = await import("./models/_module.js");
  
  // ... utilise models
});
```

### Avantages de l'Import Dynamique

1. ✅ **Retarde le chargement** des DataModels jusqu'à l'exécution du hook 'init'
2. ✅ **Évite les problèmes de timing** avec d'autres modules
3. ✅ **Permet au hook 'init' d'être async** (c'est déjà le cas)
4. ✅ **Compatible avec tous les navigateurs modernes**

## Vérifications Complémentaires

### Test 1: Vérifier sur Master

**À FAIRE**: Basculer sur la branche `master` et tester si l'erreur existe.

```bash
git checkout master
# Lancer Foundry VTT
```

**Si l'erreur existe sur master** :
- Ce n'est PAS lié aux DataModels
- C'est un problème de version de module (Babele/LibWrapper)
- Solution : Mettre à jour les modules ou signaler le bug

**Si l'erreur N'existe PAS sur master** :
- L'import dynamique devrait résoudre le problème
- Sinon, investiguer plus en profondeur

### Test 2: Versions des Modules

Dans Foundry VTT, vérifier :
- Version de **Babele** installée
- Version de **LibWrapper** installée (si présent)
- Compatibilité avec **Foundry v13**

Les modules doivent être à jour pour Foundry v13.

### Test 3: Sans Babele (test de diagnostic)

Temporairement, désactiver Babele pour confirmer que c'est la source :
1. Aller dans Configuration > Gestion des Modules
2. Désactiver Babele
3. Relancer le monde
4. Si ça fonctionne : confirme que c'est Babele

⚠️ **Attention** : Ecryme requiert Babele, donc ne pas le laisser désactivé.

## Workaround Alternatif (si l'import dynamique ne suffit pas)

Si le problème persiste, on peut protéger l'accès à `game.user` dans le code :

```javascript
// Dans ecryme-utility.js ligne 84-86
Handlebars.registerHelper('isGM', function () {
  return game.user?.isGM ?? false;  // Safe navigation
});
```

Mais cette modification ne devrait pas être nécessaire car l'helper n'est pas appelé pendant 'init'.

## Recommandations

1. **Tester avec l'import dynamique** (déjà appliqué)
2. **Vérifier sur master** si l'erreur existe déjà
3. **Mettre à jour Babele** à la dernière version compatible v13
4. **Si le problème persiste** : Signaler le bug au développeur de Babele

## Fichiers Modifiés

- `modules/ecryme-main.js` : Import dynamique des DataModels

## Prochaine Étape

**Relancer Foundry VTT** et vérifier si l'import dynamique résout le problème de timing.
