/**
 * Ancestry Item Data Model
 *
 * Defines the data schema for character ancestries (races) in Vagabond RPG.
 * Examples: Human, Dwarf, Elf, Halfling, Draken, Goblin, Orc
 *
 * Ancestries provide:
 * - Being type classification
 * - Size category
 * - Racial traits (abilities/features)
 *
 * @extends VagabondItemBase
 */
import VagabondItemBase from "./base-item.mjs";

export default class AncestryData extends VagabondItemBase {
  /**
   * Define the schema for ancestry items.
   *
   * @returns {Object} The schema definition
   */
  static defineSchema() {
    const fields = foundry.data.fields;
    const baseSchema = super.defineSchema();

    return {
      ...baseSchema,

      // Being type (Humanlike, Fae, Cryptid, etc.)
      beingType: new fields.StringField({
        required: true,
        initial: "humanlike",
      }),

      // Size category
      size: new fields.StringField({
        required: true,
        initial: "medium",
      }),

      // Racial traits - abilities granted by this ancestry
      traits: new fields.ArrayField(
        new fields.SchemaField({
          name: new fields.StringField({ required: true }),
          description: new fields.HTMLField({ required: true }),
          // Mechanical effects as Active Effect changes
          changes: new fields.ArrayField(
            new fields.SchemaField({
              key: new fields.StringField({ required: true }),
              mode: new fields.NumberField({ integer: true, initial: 2 }),
              value: new fields.StringField({ required: true }),
            }),
            { initial: [] }
          ),
        }),
        { initial: [] }
      ),
    };
  }

  /**
   * Get chat card data for displaying ancestry information.
   *
   * @returns {Object} Chat card data
   */
  getChatData() {
    const data = super.getChatData();

    data.beingType = this.beingType;
    data.size = this.size;
    data.traits = this.traits;

    return data;
  }
}
