console.info("[SOCIETY] customBlockEntityBroken.js loaded");

const handleBrokenMachine = (block) => {
  const machine = global.artisanMachineDefinitions.filter((obj) => {
    return obj.id === block.id;
  })[0];
  if (!machine) return;
  let working = block.properties.get("working").toLowerCase() == "true";
  if (machine.upgrade && block.properties.get("upgraded").toLowerCase() == "true") {
    block.popItem(machine.upgrade);
  }
  const nbt = block.getEntityData();
  const currentRecipe = machine.recipes.get(nbt.data.recipe);
  if (block.properties.get("mature").toLowerCase() == "true") {
    currentRecipe.output.forEach((element) => {
      block.popItem(element);
    });
    if (
      block.id == "society:ancient_cask" &&
      block.properties.get("upgraded").toLowerCase() == "true"
    ) block.popItem(Item.of(`3x ${Item.of(`${currentRecipe.output[0]}`).id}`));
  } else if (!["society:charging_rod", "society:tapper", "society:mushroom_log"].includes(block.id)) {
    let stage = Number(nbt.data.stage);
    if (
      currentRecipe &&
      block.id == "society:ancient_cask" &&
      block.properties.get("upgraded").toLowerCase() == "true"
    ) {
      if (working) block.popItem(Item.of(`4x ${nbt.data.recipe}`));
      else block.popItem(Item.of(`${stage}x ${nbt.data.recipe}`));
    } else if (
      block.id == "society:deluxe_worm_farm" &&
      block.properties.get("upgraded").toLowerCase() == "true"
    ) {
      // Do nothing because of infinity worm upgrade
    } else if (
      currentRecipe &&
      block.id == "society:preserves_jar" &&
      block.properties.get("upgraded").toLowerCase() == "true"
    ) {
      if (working) block.popItem(Item.of(`3x ${nbt.data.recipe}`));
      else block.popItem(Item.of(`${stage}x ${nbt.data.recipe}`));
    } else if (currentRecipe) {
      if (nbt.data.originalInputs && nbt.data.originalInputs.length > 0) {
        nbt.data.originalInputs.forEach((item) => {
          block.popItem(Item.of(`${item.Count}x ${item.id}`));
        });
      } else {
        if (working) block.popItem(Item.of(`${machine.maxInput}x ${nbt.data.recipe}`));
        else block.popItem(Item.of(`${stage}x ${nbt.data.recipe}`));
      }
    }
  }
};

BlockEvents.broken(global.artisanMachineIds, (e) => {
  handleBrokenMachine(e.block);
});

BlockEvents.broken("society:fish_pond", (e) => {
  const { block } = e;
  const nbt = block.getEntityData();
  if (nbt.data.type !== "") {
    block.popItem(
      Item.of(
        "society:fish_pond",
        `{type:"${nbt.data.type}",population:${Number(nbt.data.population)},max_population:${Number(
          nbt.data.max_population
        )},quest:${block.properties.get("quest")},quest_id:${Number(nbt.data.quest_id)}}`
      )
    );
  } else {
    block.popItem(Item.of("society:fish_pond"));
  }
  if (block.properties.get("upgraded").toLowerCase() == "true") {
    block.popItem(Item.of("society:sea_biscut"));
  }
});

BlockEvents.broken("society:prize_machine", (e) => {
  const nbt = e.block.getEntityData();
  e.block.popItem(Item.of("society:prize_machine", `{prize:${nbt.data.prize}}`));
});

BlockEvents.broken("society:coin_leaderboard", (e) => {
  global.clearOldTextDisplay(e.block, e.level, "leaderboard");
});

BlockEvents.broken("society:shipping_bin_monitor", (e) => {
  global.clearOldTextDisplay(e.block, e.level, "shipping_bin_monitor");
});

BlockEvents.broken("society:fish_pond_basket", (e) => {
  const { block } = e;
  if (block.properties.get("upgraded").toLowerCase() == "true") {
    block.popItem(Item.of("minecraft:bucket"));
  }
});
BlockEvents.broken("society:auto_grabber", (e) => {
  const { block } = e;
  if (block.properties.get("upgraded").toLowerCase() == "true") {
    block.popItem(Item.of("society:magic_shears"));
  }
});
