package de.iani.treasurechest;

import java.util.HashMap;
import java.util.Iterator;
import java.util.UUID;

public class TreasureChestData {
    private HashMap<UUID, TreasureChestItem> activeItems;

    private HashMap<UUID, PlayerTreasureChestContent> loadedChests;

    private HashMap<UUID, ListedItemsData> listedItems;

    private TreasureChest plugin;

    public TreasureChestData(TreasureChest plugin) {
        activeItems = new HashMap<>();
        loadedChests = new HashMap<>();
        listedItems = new HashMap<>();

        this.plugin = plugin;
    }

    public TreasureChestItem getActiveItem(UUID playerUUID) {
        return activeItems.get(playerUUID);
    }

    public TreasureChestItem setActiveItem(UUID playerUUID, TreasureChestItem item) {
        if (item == null) {
            return removeActiveItem(playerUUID);
        }
        return activeItems.put(playerUUID, item);
    }

    public TreasureChestItem removeActiveItem(UUID owner) {
        return activeItems.remove(owner);
    }

    public PlayerTreasureChestContent getOrCreateChestContent(UUID owner) {
        PlayerTreasureChestContent content = loadedChests.get(owner);
        if (content == null) {
            content = new PlayerTreasureChestContent(owner, plugin);
            loadedChests.put(owner, content);
        }
        return content;
    }

    public PlayerTreasureChestContent getChestContent(UUID owner) {
        return loadedChests.get(owner);
    }

    public void reloadTreasureChest(UUID owner) {
        loadedChests.put(owner, new PlayerTreasureChestContent(owner, plugin));
    }

    public void unloadTreasureChest(UUID owner) {
        loadedChests.remove(owner);
    }

    public ListedItemsData getListedItems(UUID owner) {
        return listedItems.get(owner);
    }

    public void setListedItems(UUID owner, ListedItemsData data) {
        listedItems.put(owner, data);
    }

    public void removeListedItems(UUID owner) {
        listedItems.remove(owner);
    }

    public void doGC() {
        Iterator<PlayerTreasureChestContent> it = loadedChests.values().iterator();
        while (it.hasNext()) {
            PlayerTreasureChestContent c = it.next();
            if (plugin.getServer().getPlayer(c.getOwner()) == null) {
                it.remove();
            }
        }
    }
}
