# BoL DataModels

Ce dossier contient les DataModels pour le système Barbarians of Lemuria (BoL).

## Structure

### Actors DataModels

- **character.mjs** : Personnages joueurs
  - Attributs (Vigor, Agility, Mind, Appeal)
  - Aptitudes (Initiative, Mêlée, Distance, Défense)
  - Ressources (HP, Hero Points, Faith, Power, Alchemy, Astrology)
  - XP et création
  - Bougette (argent)

- **encounter.mjs** : PNJ et créatures
  - Mêmes attributs que character
  - Champs spécifiques : chartype (tough/villain), isundead, size, environment

- **horde.mjs** : Hordes de créatures
  - Mêmes attributs de base
  - Champs spécifiques : hordesize, hordebasehp, hasdamagerule, damagerule

- **vehicle.mjs** : Véhicules (navires, chars, etc.)
  - Attributs véhicules : hull, crew, resources
  - Champs spécifiques : vehicletype, row, spur, status

### Items DataModels

- **item.mjs** : Équipements et objets
  - Propriétés (weapon, armor, magical, etc.)
  - Équipement (quantity, weight, price, worn)
  - Category et subtype

- **feature.mjs** : Capacités, traits, sorts
  - Rank (niveau/rang)
  - Description
  - Category et subtype

## Architecture

Tous les DataModels héritent de `foundry.abstract.TypeDataModel` et définissent leur schéma via `defineSchema()`.

Exemple de structure :

```javascript
export default class BoLCharacterDataModel extends foundry.abstract.TypeDataModel {
  static defineSchema() {
    const fields = foundry.data.fields;
    const requiredInteger = { required: true, nullable: false, integer: true };
    
    return {
      // Définition des champs
    };
  }
  
  static LOCALIZATION_PREFIXES = ["BOL.Character"];
  
  // Méthodes personnalisées (à ajouter)
}
```

## Types de champs utilisés

- `StringField` : Chaînes de caractères
- `NumberField` : Nombres (avec option `integer: true` pour entiers)
- `BooleanField` : Booléens
- `HTMLField` : HTML enrichi (descriptions, biographies)
- `ArrayField` : Tableaux
- `SchemaField` : Objets imbriqués

## Export

Le fichier `_module.mjs` exporte tous les DataModels :

```javascript
export { default as BoLCharacter } from "./character.mjs"
export { default as BoLEncounter } from "./encounter.mjs"
export { default as BoLHorde } from "./horde.mjs"
export { default as BoLVehicle } from "./vehicle.mjs"
export { default as BoLItem } from "./item.mjs"
export { default as BoLFeature } from "./feature.mjs"
```

## Configuration dans bol.js

Les DataModels sont enregistrés dans `CONFIG` :

```javascript
CONFIG.Actor.dataModels = {
  character: models.BoLCharacter,
  encounter: models.BoLEncounter,
  horde: models.BoLHorde,
  vehicle: models.BoLVehicle
}

CONFIG.Item.dataModels = {
  item: models.BoLItem,
  feature: models.BoLFeature
}
```

## Compatibilité

Les DataModels sont compatibles avec le `template.json` existant. La migration est transparente pour les données existantes.

## Prochaines étapes

1. Ajouter `prepareDerivedData()` pour les calculs automatiques
2. Migrer la logique métier depuis actor.js
3. Ajouter des validations personnalisées
4. Documenter avec JSDoc
