import CthulhuEternalUtils from "../utils.mjs"

export default class CthulhuEternalActor extends Actor {

  static async create(data, options) {

    // Case of compendium global import
    if (data instanceof Array) {
      return super.create(data, options);
    }
    // If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic
    if (data.items) {
      let actor = super.create(data, options);
      return actor;
    }

    if (data.type === 'protagonist') {
      let era = game.settings.get("fvtt-cthulhu-eternal", "settings-era")
      const skills = await CthulhuEternalUtils.loadCompendium("fvtt-cthulhu-eternal.skills")
      data.items = data.items || []
      for (let skill of skills) {
        if (skill.system.settings === era) {
          data.items.push(skill.toObject())
        }
      }
    }

    return super.create(data, options);
  }

  _onUpdate(changed, options, userId) {
    // DEBUG : console.log("CthulhuEternalActor.update", changed, options, userId)
    if (changed?.system?.wp?.exhausted) {
      ChatMessage.create({
        user: userId,
        speaker: { alias: this.name },
        rollMode: "selfroll",
        content: game.i18n.localize("CTHULHUETERNAL.ChatMessage.exhausted"),
        type: CONST.CHAT_MESSAGE_STYLES.OTHER
      })
    }
    return super._onUpdate(changed, options, userId)
  }

  async createEmbeddedDocuments(embeddedName, data, operation) {
    let newData = []
    if (embeddedName === "Item") {
      for (let i of data) {
        if (i.type === "skill") {
          if (this.items.find(item => item.name.toLowerCase() === i.name.toLowerCase())) {
            ui.notifications.warn(game.i18n.localize("CTHULHUETERNAL.Notifications.skillAlreadyExists"))
            continue
          }
        }
        if (i.type === "bond") {
          if (i.system.bondType === "individual") {
            i.system.value = this.system.characteristics.cha.value
          } else {
            i.system.value = Math.floor(this.system.resources.permanentRating / 2)
          }
        }
        newData.push(i)
      }
      return super.createEmbeddedDocuments(embeddedName, newData, operation)
    }
    return super.createEmbeddedDocuments(embeddedName, data, operation)
  }

  async _preCreate(data, options, user) {
  await super._preCreate(data, options, user)

  // Configure prototype token settings
  const prototypeToken = {}
  if (this.type === "protagonist") {
    Object.assign(prototypeToken, {
      sight: { enabled: true },
      actorLink: true,
      disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY,
    })
    this.updateSource({ prototypeToken })
  }
}

}
