package io.github.bedwarsrel.shop.Specials;

import io.github.bedwarsrel.BedwarsRel;
import io.github.bedwarsrel.game.Game;
import io.github.bedwarsrel.game.GameState;
import io.github.bedwarsrel.utils.Utils;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;

public class MagnetShoeListener implements Listener {

  @EventHandler(priority = EventPriority.HIGHEST)
  public void onDamage(EntityDamageByEntityEvent ev) {
    if (ev.isCancelled()) {
      return;
    }

    if (!(ev.getEntity() instanceof Player)) {
      return;
    }

    Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer((Player) ev.getEntity());
    if (game == null) {
      return;
    }

    if (game.getState() != GameState.RUNNING) {
      return;
    }

    Player player = (Player) ev.getEntity();
    ItemStack boots = player.getInventory().getBoots();

    if (boots == null) {
      return;
    }

    MagnetShoe shoe = new MagnetShoe();
    if (boots.getType() != shoe.getItemMaterial()) {
      return;
    }

    if (this.rollKnockbackDice()) {
      ev.setCancelled(true);
      player.damage(ev.getDamage());
    }
  }

  private boolean rollKnockbackDice() {
    int target = BedwarsRel.getInstance().getIntConfig("specials.magnetshoe.probability", 75);
    int roll = Utils.randInt(0, 100);

    return (roll <= target);
  }

}