/**
 * 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/
 */

import { rollInitiativeNPC } from "../../initiative.js"
import { rollForActor } from "../../rolling.js"
import { CDEBaseActorSheet } from "./base.js"

export class CDENpcSheet extends CDEBaseActorSheet {
  static DEFAULT_OPTIONS = {
    classes: ["npc"],
  }

  static PARTS = {
    main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-npc-sheet.html" },
  }

  tabGroups = { primary: "description" }

  async _prepareContext() {
    const context = await super._prepareContext()
    context.supernaturals = context.items.filter((item) => item.type === "supernatural")
    context.spells       = context.items.filter((item) => item.type === "spell")
    context.kungfus      = context.items.filter((item) => item.type === "kungfu")
    context.weapons      = context.items.filter((item) => item.type === "weapon")
    context.armors       = context.items.filter((item) => item.type === "armor")
    context.equipments   = context.items.filter((item) => item.type === "item")
    return context
  }

  _onRender(context, options) {
    super._onRender(context, options)
    this.#bindInitiativeControls()
    this.#bindRollButtons()
  }

  #bindRollButtons() {
    const cells = this.element?.querySelectorAll(".cde-roll-trigger[data-libel-id]")
    if (!cells?.length) return
    cells.forEach((cell) => {
      cell.addEventListener("click", (event) => {
        event.preventDefault()
        const rollKey = cell.dataset.libelId
        if (rollKey) rollForActor(this.document, rollKey)?.catch(err => console.error("Roll failed:", err))
      })
    })
  }

  #bindInitiativeControls() {
    const buttons = this.element?.querySelectorAll(".click-initiative-npc")
    if (!buttons?.length) return
    buttons.forEach((button) => {
      button.addEventListener("click", async () => {
        const action = button.dataset.libelId
        let initiative = this.document.system.initiative ?? 1
        if (action === "plus") {
          initiative = initiative >= 24 ? 1 : initiative + 1
          await this.document.update({ "system.initiative": initiative })
          return
        }
        if (action === "minus") {
          initiative = initiative <= 1 ? 24 : initiative - 1
          await this.document.update({ "system.initiative": initiative })
          return
        }
        if (action === "create") {
          await rollInitiativeNPC(this.document)
        }
      })
    })
  }
}
