// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.builtin.adventure.memories.window;

import com.hypixel.hytale.component.ComponentAccessor;
import javax.annotation.Nullable;
import java.util.Set;
import java.util.Map;
import com.hypixel.hytale.builtin.adventure.memories.MemoriesPlugin;
import java.util.Iterator;
import com.google.gson.JsonElement;
import com.hypixel.hytale.server.core.util.BsonUtil;
import com.hypixel.hytale.codec.ExtraInfo;
import com.hypixel.hytale.codec.EmptyExtraInfo;
import com.hypixel.hytale.server.core.Message;
import com.hypixel.hytale.builtin.adventure.memories.memories.Memory;
import com.hypixel.hytale.builtin.adventure.memories.component.PlayerMemories;
import com.google.gson.JsonArray;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Ref;
import javax.annotation.Nonnull;
import com.hypixel.hytale.protocol.packets.window.WindowType;
import com.google.gson.JsonObject;
import com.hypixel.hytale.server.core.entity.entities.player.windows.Window;

public class MemoriesWindow extends Window
{
    private final JsonObject windowData;
    
    public MemoriesWindow() {
        super(WindowType.Memories);
        this.windowData = new JsonObject();
    }
    
    @Nonnull
    @Override
    public JsonObject getData() {
        return this.windowData;
    }
    
    public boolean onOpen0(@Nonnull final Ref<EntityStore> ref, @Nonnull final Store<EntityStore> store) {
        final JsonArray array = new JsonArray();
        final PlayerMemories playerMemoriesComponent = store.getComponent(ref, PlayerMemories.getComponentType());
        if (playerMemoriesComponent != null) {
            this.windowData.addProperty("capacity", playerMemoriesComponent.getMemoriesCapacity());
            for (final Memory memory : playerMemoriesComponent.getRecordedMemories()) {
                final JsonObject obj = new JsonObject();
                obj.addProperty("title", memory.getTitle());
                obj.add("tooltipText", BsonUtil.translateBsonToJson(Message.CODEC.encode(memory.getTooltipText(), EmptyExtraInfo.EMPTY).asDocument()));
                final String iconPath = memory.getIconPath();
                if (iconPath != null && !iconPath.isEmpty()) {
                    obj.addProperty("icon", iconPath);
                }
                final String category = GetCategoryIconPathForMemory(memory);
                if (category != null) {
                    obj.addProperty("categoryIcon", category);
                }
                array.add(obj);
            }
        }
        else {
            this.windowData.addProperty("capacity", 0);
        }
        this.windowData.add("memories", array);
        this.invalidate();
        return true;
    }
    
    @Nullable
    private static String GetCategoryIconPathForMemory(@Nonnull final Memory memory) {
        final Map<String, Set<Memory>> allMemories = MemoriesPlugin.get().getAllMemories();
        for (final Map.Entry<String, Set<Memory>> entry : allMemories.entrySet()) {
            if (!entry.getValue().contains(memory)) {
                continue;
            }
            final String memoryCategoryIconBasePath = "UI/Custom/Pages/Memories/categories/%s.png";
            return String.format("UI/Custom/Pages/Memories/categories/%s.png", entry.getKey());
        }
        return null;
    }
    
    public void onClose0(@Nonnull final Ref<EntityStore> ref, @Nonnull final ComponentAccessor<EntityStore> componentAccessor) {
    }
}
