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

package com.hypixel.hytale.builtin.adventure.objectives.completion;

import com.hypixel.hytale.builtin.adventure.objectives.historydata.ObjectiveHistoryData;
import java.util.Iterator;
import java.util.UUID;
import java.util.List;
import com.hypixel.hytale.server.core.inventory.Inventory;
import com.hypixel.hytale.server.core.entity.Entity;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.util.NotificationUtil;
import com.hypixel.hytale.server.core.Message;
import com.hypixel.hytale.builtin.adventure.objectives.historydata.ObjectiveRewardHistoryData;
import com.hypixel.hytale.builtin.adventure.objectives.historydata.ItemObjectiveRewardHistoryData;
import com.hypixel.hytale.server.core.inventory.ItemStack;
import com.hypixel.hytale.server.core.entity.UUIDComponent;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.inventory.container.ItemContainer;
import com.hypixel.hytale.server.core.inventory.container.SimpleItemContainer;
import com.hypixel.hytale.server.core.modules.item.ItemModule;
import com.hypixel.hytale.server.core.entity.LivingEntity;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.core.entity.EntityUtils;
import com.hypixel.hytale.server.core.universe.Universe;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.ComponentAccessor;
import com.hypixel.hytale.builtin.adventure.objectives.Objective;
import com.hypixel.hytale.builtin.adventure.objectives.config.completion.ObjectiveCompletionAsset;
import javax.annotation.Nonnull;
import com.hypixel.hytale.builtin.adventure.objectives.config.completion.GiveItemsCompletionAsset;

public class GiveItemsCompletion extends ObjectiveCompletion
{
    static final /* synthetic */ boolean $assertionsDisabled;
    
    public GiveItemsCompletion(@Nonnull final GiveItemsCompletionAsset asset) {
        super(asset);
    }
    
    @Nonnull
    @Override
    public GiveItemsCompletionAsset getAsset() {
        return (GiveItemsCompletionAsset)super.getAsset();
    }
    
    @Override
    public void handle(@Nonnull final Objective objective, @Nonnull final ComponentAccessor<EntityStore> componentAccessor) {
        final World world = Universe.get().getWorld(objective.getWorldUUID());
        if (world == null) {
            return;
        }
        final Store<EntityStore> store = world.getEntityStore().getStore();
        final boolean showItemNotification = world.getGameplayConfig().getShowItemPickupNotifications();
        objective.forEachParticipant((participantReference, asset, objectiveHistoryData) -> {
            final Entity entity = EntityUtils.getEntity(participantReference, componentAccessor);
            if (entity instanceof final LivingEntity livingEntity) {
                final Inventory inventory = livingEntity.getInventory();
                final List<ItemStack> itemStacks = ItemModule.get().getRandomItemDrops(asset.getDropListId());
                SimpleItemContainer.addOrDropItemStacks(store, participantReference, inventory.getCombinedHotbarFirst(), itemStacks);
                final Player playerComponent = componentAccessor.getComponent(participantReference, Player.getComponentType());
                if (playerComponent != null) {
                    final PlayerRef playerRefComponent = componentAccessor.getComponent(participantReference, PlayerRef.getComponentType());
                    if (!GiveItemsCompletion.$assertionsDisabled && playerRefComponent == null) {
                        throw new AssertionError();
                    }
                    else {
                        final UUIDComponent uuidComponent = store.getComponent(participantReference, UUIDComponent.getComponentType());
                        if (!GiveItemsCompletion.$assertionsDisabled && uuidComponent == null) {
                            throw new AssertionError();
                        }
                        else {
                            final UUID uuid = uuidComponent.getUuid();
                            for (final ItemStack itemStack : itemStacks) {
                                objectiveHistoryData.addRewardForPlayerUUID(uuid, new ItemObjectiveRewardHistoryData(itemStack.getItemId(), itemStack.getQuantity()));
                                if (showItemNotification) {
                                    final Message itemNameMessage = Message.translation(itemStack.getItem().getTranslationKey());
                                    NotificationUtil.sendNotification(playerRefComponent.getPacketHandler(), Message.translation("server.objectives.itemObjectiveCompletion").param("item", itemNameMessage), null, itemStack.toPacket());
                                }
                            }
                        }
                    }
                }
            }
        }, this.getAsset(), objective.getObjectiveHistoryData());
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "GiveItemsCompletion{} " + super.toString();
    }
}
