/**
 * DataModel pour les acteurs de type "vehicle" (véhicules et montures).
 * Un véhicule est désormais un acteur (et non un objet) : il possède sa propre
 * fiche, peut être posé sur la scène comme un jeton et appartient à un groupe
 * ou un personnage via `ownerId`.
 *
 * Caractéristiques (regles_vehicules.txt) : Rareté, Fiabilité (véhicules),
 * Réserve d'Effort (montures), Distance, Vitesse (croisière/pointe) et Entretien.
 * Pas de statistiques de combat (les règles ne définissent pas de points de vie).
 */
import { raritySchema } from "./_shared.mjs"

export default class VermineVehicleData extends foundry.abstract.TypeDataModel {

  /** @override */
  static LOCALIZATION_PREFIXES = ["VERMINE.vehicle"]

  /** @override */
  static defineSchema() {
    const fields = foundry.data.fields
    const reqInt = { required: true, nullable: false, integer: true }
    return {
      // Identité
      identity: new fields.SchemaField({
        profile: new fields.StringField({ required: true, nullable: false, initial: "" }),
        origin: new fields.StringField({ required: true, nullable: false, initial: "" }),
        theme: new fields.StringField({ required: true, nullable: false, initial: "" }),
        notes: new fields.HTMLField({ required: true, initial: "", textSearch: true })
      }),

      // Rareté (valeur 1-10 + handicap)
      rarity: raritySchema(),

      // Fiabilité étendue (1-10) pour les véhicules
      reliability: new fields.NumberField({ ...reqInt, initial: 5, min: 1, max: 10 }),

      // Type : "vehicle" (véhicule) ou "mount" (monture)
      kind: new fields.StringField({ required: true, nullable: false, initial: "vehicle" }),

      // Distance : km parcourus avec un "plein"
      distance: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }),

      // Vitesse : croisière / pointe (durée de la pointe)
      speed: new fields.SchemaField({
        cruise: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }),
        top: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }),
        topDuration: new fields.StringField({ required: true, nullable: false, initial: "10 min" })
      }),

      // Entretien : compétences nécessaires (clés de CONFIG.VERMINE.skills)
      maintenance: new fields.ArrayField(new fields.StringField({ required: true, nullable: false, initial: "" })),

      // Réserve d'Effort (montures)
      effortReserve: new fields.SchemaField({
        value: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }),
        min: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }),
        max: new fields.NumberField({ ...reqInt, initial: 0, min: 0 })
      }),

      // Mobilité
      mobility: new fields.NumberField({ ...reqInt, initial: 3, min: 0 }),

      // Propriétaire (id d'acteur : groupe ou personnage)
      ownerId: new fields.StringField({ required: true, nullable: false, initial: "" })
    }
  }
}
