/**
 * Chroniques de l'Étrange — Système FoundryVTT
 *
 * Chroniques de l'Étrange est un jeu de rôle édité par Antre-Monde Éditions.
 * Ce système FoundryVTT est une implémentation indépendante et n'est pas
 * affilié à Antre-Monde Éditions,
 * mais a été réalisé avec l'autorisation d'Antre-Monde Éditions.
 *
 * @author    LeRatierBretonnien
 * @copyright 2024–2026 LeRatierBretonnien
 * @license   CC BY-NC-SA 4.0 – https://creativecommons.org/licenses/by-nc-sa/4.0/
 */

export class CDEMessage extends ChatMessage {
  async renderHTML({ canDelete, canClose = false, ...rest } = {}) {
    const html = await super.renderHTML({ canDelete, canClose, ...rest })
    this.#enrichChatCard(html)
    return html
  }

  #enrichChatCard(html) {
    const tokenDoc = (this.speaker.scene && this.speaker.token)
      ? game.scenes.get(this.speaker.scene)?.tokens.get(this.speaker.token)
      : null
    const actor = tokenDoc?.actor ?? game.actors.get(this.speaker.actor) ?? null

    const [img, nameText] = this.isContentVisible
      ? [actor?.img ?? this.author.avatar, this.alias]
      : [this.author.avatar, this.author.name]

    const avatarImg = Object.assign(document.createElement("img"), { src: img, alt: nameText })
    const avatar = Object.assign(document.createElement("a"), { className: "avatar" })
    if (actor) avatar.dataset.uuid = actor.uuid
    avatar.append(avatarImg)

    const title = Object.assign(document.createElement("span"), { className: "title", textContent: nameText })
    const name = Object.assign(document.createElement("span"), { className: "name-stacked" })
    name.append(title)

    html.querySelector(".message-sender")?.replaceChildren(avatar, name)
  }
}
