export class RdDRollTables {

  /* -------------------------------------------- */
  static async genericGetTableResult(tableName, toChat) {
    let table = game.tables.find(table => table.name.toLowerCase() == tableName.toLowerCase())
    if ( !table) {
      const pack = game.packs.get("foundryvtt-reve-de-dragon.tables-diverses");
      const index = await pack.getIndex();
      const entry = index.find(e => e.name === tableName);
      table = await pack.getDocument(entry._id);
    }
    const draw = await table.draw({ displayChat: toChat, rollMode: "gmroll"});
    //console.log("RdDRollTables", tableName, toChat, ":", draw);
    return draw.results.length > 0 ? draw.results[0] : undefined;
  }

  /* -------------------------------------------- */
  static async drawItemFromRollTable(tableName, toChat = false) {
    const drawResult = await RdDRollTables.genericGetTableResult(tableName, toChat);
    const pack = game.packs.get(drawResult.documentCollection)
    let doc = await pack.getDocument(drawResult.documentId)
    return doc
  }
  
  /* -------------------------------------------- */
  static async drawTextFromRollTable(tableName, toChat) {
    const drawResult = await RdDRollTables.genericGetTableResult(tableName, toChat);
    return drawResult.system.text;
  }

  /* -------------------------------------------- */
  static async getCompetence(toChat = false) {
    return await RdDRollTables.drawItemFromRollTable("Détermination aléatoire de compétence", toChat);
  }

  /* -------------------------------------------- */
  static async getSouffle(toChat = false) {
    return await RdDRollTables.drawItemFromRollTable("Souffles de Dragon", toChat);
  }

  /* -------------------------------------------- */
  static async getQueue(toChat = false) {
    let queue = await RdDRollTables.drawItemFromRollTable("Queues de dragon", toChat);
    if (queue.name.toLowerCase().includes('lancinant') ) {
      return await RdDRollTables.getDesirLancinant(toChat);
    }
    if (queue.name.toLowerCase().includes('fixe') ) {
      return await RdDRollTables.getIdeeFixe(toChat);
    }
    return queue;
  }

  static async getDesirLancinant(toChat = false) {
    return await RdDRollTables.drawItemFromRollTable("Désirs lancinants", toChat);
  }
  
  static async getIdeeFixe(toChat = false) {
    return await RdDRollTables.drawItemFromRollTable("Idées fixes", toChat);
  }

  /* -------------------------------------------- */
  static async getTeteHR(toChat = false) {
    return await RdDRollTables.drawItemFromRollTable("Têtes de Dragon pour haut-rêvants", toChat);
  }

  /* -------------------------------------------- */
  static async getTete(toChat = false) {
    return await RdDRollTables.drawItemFromRollTable("Têtes de Dragon pour tous personnages", toChat);
  }

  /* -------------------------------------------- */
  static async getOmbre(toChat = false) {
    return await RdDRollTables.drawItemFromRollTable("Ombre de Thanatos", toChat);
  }

  /* -------------------------------------------- */
  static async getTarot(toChat = true) {
    return await RdDRollTables.drawItemFromRollTable("Tarot Draconique", toChat);
  }

  /* -------------------------------------------- */
  static async getMaladresse(options = {toChat: false, arme: false}) {
    return await RdDRollTables.drawTextFromRollTable(
      options.arme ? "Maladresse armé" : "Maladresses non armé",
      options.toChat);
  }
}