package plus.crates.Crates;

import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import plus.crates.CratesPlus;
import plus.crates.Handlers.ConfigHandler;
import plus.crates.Utils.GUI;

import java.util.List;
import java.util.UUID;

/**
 * Oh this is a fun one...
 */
public class MysteryCrate extends Crate {
    private String guiTitle = null;
    private String itemTitle = null;
    private List<String> lore = null;

    public MysteryCrate(ConfigHandler configHandler, String name) {
        super(configHandler, name);
        loadCrate();
    }

    protected void loadCrate() {
        CratesPlus cratesPlus = getCratesPlus();
        if (cratesPlus.getConfig().isSet("Crates." + name + ".GUI Title"))
            this.guiTitle = ChatColor.translateAlternateColorCodes('&', cratesPlus.getConfig().getString("Crates." + name + ".GUI Title"));

        if (cratesPlus.getConfig().isSet("Crates." + name + ".Item Title"))
            this.itemTitle = ChatColor.RESET + ChatColor.translateAlternateColorCodes('&', cratesPlus.getConfig().getString("Crates." + name + ".Item Title"));

        if (cratesPlus.getConfig().isSet("Crates." + name + ".Lore"))
            this.lore = cratesPlus.getConfig().getStringList("Crates." + name + ".Lore");
    }

    public boolean give(OfflinePlayer offlinePlayer, Integer amount) {
        CratesPlus cratesPlus = getCratesPlus();
        UUID uuid = offlinePlayer.getUniqueId();
        cratesPlus.getStorageHandler().incPlayerData(uuid, "Crates-" + getName(false), amount);
        return true;
    }

    public void openGUI(Player player) {
        CratesPlus cratesPlus = getCratesPlus();
        GUI gui = new GUI(guiTitle != null ? guiTitle : getName(false));

        ItemStack itemStack = new ItemStack(getBlock(), 1, (short) getBlockData());
        ItemMeta itemMeta = itemStack.getItemMeta();
        itemMeta.setDisplayName(itemTitle != null ? itemTitle : getName(true));
        itemStack.setItemMeta(itemMeta);

        Integer count = (Integer) cratesPlus.getStorageHandler().getPlayerData(player.getUniqueId(), "Crates-" + getName(false));
        if (count > 0) {
            for (int i = 0; i < count; i++) {
                final int finalI = i;
                gui.addItem(itemStack, new GUI.ClickHandler() {
                    @Override
                    public void doClick(Player player, GUI gui) {
                        player.sendMessage(ChatColor.YELLOW + "// TODO");
                        player.sendMessage(ChatColor.AQUA + "#" + finalI);
                    }
                });
            }
        }

        gui.setGoBackHandler(new GUI.ClickHandler() {
            @Override
            public void doClick(Player player, GUI gui) {
                player.closeInventory();
            }
        });
        gui.open(player);
    }

}