package plus.crates.Crates;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import plus.crates.CratesPlus;
import plus.crates.Handlers.MessageHandler;

import java.util.ArrayList;
import java.util.List;

public class Key {
    private final CratesPlus cratesPlus;
    private final KeyCrate crate;
    private final Material material;
    private final short data;
    private final String name;
    private final List<String> lore = new ArrayList<>();
    private final boolean enchanted;

    public Key(KeyCrate crate, Material material, short data, String name, boolean enchanted, List<String> lore, CratesPlus cratesPlus) {
        this.cratesPlus = cratesPlus;
        this.crate = crate;
        if (material == null)
            material = Material.TRIPWIRE_HOOK;
        this.material = material;
        this.data = data;
        this.name = name;
        this.enchanted = enchanted;
        if (!lore.isEmpty()) {
            for (String line : lore) {
                this.lore.add(MessageHandler.convertPlaceholders(line, null, crate, null));
            }
        }
    }

    public Material getMaterial() {
        return material;
    }

    public short getData() {
        return data;
    }

    public String getName() {
        return ChatColor.translateAlternateColorCodes('&', name);
    }

    public List<String> getLore() {
        if (this.lore.isEmpty()) {
            this.lore.add(ChatColor.GRAY + "Right-Click on a \"" + getCrate().getName(true) + ChatColor.GRAY + "\" crate");
            this.lore.add(ChatColor.GRAY + "to win an item!");
            this.lore.add("");
        }
        return this.lore;
    }

    public boolean isEnchanted() {
        return enchanted;
    }

    public ItemStack getKeyItem(Integer amount) {
        ItemStack keyItem = new ItemStack(getMaterial(), amount, getData());
        if (isEnchanted())
            keyItem.addUnsafeEnchantment(Enchantment.DURABILITY, 1);
        ItemMeta keyItemMeta = keyItem.getItemMeta();
        String title = getName().replaceAll("%type%", getCrate().getName(true));
        keyItemMeta.setDisplayName(title);
        keyItemMeta.setLore(getLore());
        ArrayList<String> flags = new ArrayList<>();
        flags.add("HIDE_ENCHANTS");
        keyItemMeta = cratesPlus.getVersion_util().handleItemFlags(keyItemMeta, flags);
        keyItem.setItemMeta(keyItemMeta);
        return keyItem;
    }

    public KeyCrate getCrate() {
        return crate;
    }

}