package los.numeros.HidersAndDiggers.modules;

import los.numeros.GameEngine.Module;
import los.numeros.utils.GiveItem;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.item.ItemStack;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.world.GameMode;

public class MainModule implements Module {
  ServerPlayerEntity[] diggers, hidders, players;

  public MainModule(ServerPlayerEntity[] diggers, ServerPlayerEntity[] hidders, ServerPlayerEntity[] players) {
    this.diggers = diggers;
    this.hidders = hidders;
    this.players = players;
  }

  public void giveDiggerItems(ServerPlayerEntity[] diggers) {
    for (ServerPlayerEntity p : diggers) {
      GiveItem.setPlayerSlot(p, "diamond_helmet", GiveItem.ARMOR_HEAD);
      GiveItem.setPlayerSlot(p, "diamond_leggings", GiveItem.ARMOR_LEGS);
      GiveItem.setPlayerSlot(p, "diamond_chestplate", GiveItem.ARMOR_CHEST);
      GiveItem.setPlayerSlot(p, "diamond_boots", GiveItem.ARMOR_BOOTS);
      GiveItem.setPlayerSlot(p, "iron_sword", 0);
      ItemStack pickaxe = GiveItem.givePlayerSpecialItem(p, "diamond_pickaxe");
      pickaxe.addEnchantment(Enchantments.EFFICIENCY, 3);
      pickaxe.addEnchantment(Enchantments.UNBREAKING, 255); // TODO: add item attribute unbreakable
      p.equip(1, pickaxe);
    }
  }

  public void giveHidersItems(ServerPlayerEntity[] hidders) {
    for (ServerPlayerEntity p : hidders) {
      ItemStack pickaxe = GiveItem.givePlayerSpecialItem(p, "diamond_pickaxe");
      pickaxe.addEnchantment(Enchantments.SILK_TOUCH, 1);
      pickaxe.addEnchantment(Enchantments.UNBREAKING, 255); // TODO: add item attribute unbreakable
      p.equip(0, pickaxe);
      GiveItem.setPlayerSlot(p, "minecraft:stone", 1);
    }
  }

  @Override
  public int init()
  {
    giveHidersItems(hidders);
    giveDiggerItems(diggers);
    for (ServerPlayerEntity p : players) {
      p.addStatusEffect(new StatusEffectInstance(StatusEffects.NIGHT_VISION, 200000000, 3, false, false));
      p.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, 200000000, 1, false, false));
      p.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 300, 100, false, false)); // TODO: Rplace with jsut setting health/hunger
      p.addStatusEffect(new StatusEffectInstance(StatusEffects.SATURATION, 300, 100, false, false));
      // TODO: add haste
      // TODO: add beef x64
      p.setGameMode(GameMode.SURVIVAL);
    }
    // TODO: FILL AND TP PLAYERS AND CLEAR ALL ITEMS
    return 0;
  }
  
  @Override
  public int end()
  {

    return 0;
  }
}