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

package com.hypixel.hytale.server.core.entity.entities.player.windows;

import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.inventory.container.SortType;
import com.hypixel.hytale.protocol.packets.window.SortItemsAction;
import com.hypixel.hytale.protocol.packets.window.WindowAction;
import com.hypixel.hytale.component.ComponentAccessor;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.core.asset.type.item.config.Item;
import com.hypixel.hytale.protocol.packets.window.WindowType;
import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
import com.hypixel.hytale.server.core.inventory.container.ItemContainer;
import javax.annotation.Nonnull;
import com.google.gson.JsonObject;

public class ContainerBlockWindow extends BlockWindow implements ItemContainerWindow
{
    @Nonnull
    private final JsonObject windowData;
    @Nonnull
    private final ItemContainer itemContainer;
    
    public ContainerBlockWindow(final int x, final int y, final int z, final int rotationIndex, @Nonnull final BlockType blockType, @Nonnull final ItemContainer itemContainer) {
        super(WindowType.Container, x, y, z, rotationIndex, blockType);
        this.itemContainer = itemContainer;
        this.windowData = new JsonObject();
        final Item item = blockType.getItem();
        this.windowData.addProperty("blockItemId", item.getId());
    }
    
    @Nonnull
    @Override
    public JsonObject getData() {
        return this.windowData;
    }
    
    public boolean onOpen0(@Nonnull final Ref<EntityStore> ref, @Nonnull final Store<EntityStore> store) {
        return true;
    }
    
    public void onClose0(@Nonnull final Ref<EntityStore> ref, @Nonnull final ComponentAccessor<EntityStore> componentAccessor) {
    }
    
    @Nonnull
    @Override
    public ItemContainer getItemContainer() {
        return this.itemContainer;
    }
    
    @Override
    public void handleAction(@Nonnull final Ref<EntityStore> ref, @Nonnull final Store<EntityStore> store, @Nonnull final WindowAction action) {
        if (!(action instanceof SortItemsAction)) {
            return;
        }
        final SortItemsAction sortAction = (SortItemsAction)action;
        final SortType sortType = SortType.fromPacket(sortAction.sortType);
        final Player playerComponent = store.getComponent(ref, Player.getComponentType());
        assert playerComponent != null;
        playerComponent.getInventory().setSortType(sortType);
        this.itemContainer.sortItems(sortType);
        this.invalidate();
    }
}
