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

package com.hypixel.hytale.server.core.modules.item;

import com.hypixel.hytale.assetstore.AssetMap;
import java.util.Set;
import java.util.Iterator;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import com.hypixel.hytale.protocol.UpdateType;
import com.hypixel.hytale.protocol.packets.assets.UpdateItemReticles;
import com.hypixel.hytale.protocol.Packet;
import java.util.Map;
import javax.annotation.Nonnull;
import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
import com.hypixel.hytale.server.core.asset.type.item.config.ItemReticleConfig;
import com.hypixel.hytale.server.core.asset.packet.SimpleAssetPacketGenerator;

public class ItemReticleConfigPacketGenerator extends SimpleAssetPacketGenerator<String, ItemReticleConfig, IndexedLookupTableAssetMap<String, ItemReticleConfig>>
{
    @Nonnull
    @Override
    public Packet generateInitPacket(@Nonnull final IndexedLookupTableAssetMap<String, ItemReticleConfig> assetMap, @Nonnull final Map<String, ItemReticleConfig> assets) {
        final UpdateItemReticles packet = new UpdateItemReticles();
        packet.type = UpdateType.Init;
        packet.itemReticleConfigs = new Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.ItemReticleConfig>();
        for (final Map.Entry<String, ItemReticleConfig> entry : assets.entrySet()) {
            final String key = entry.getKey();
            final int index = assetMap.getIndex(key);
            if (index == Integer.MIN_VALUE) {
                throw new IllegalArgumentException("Unknown key! " + key);
            }
            packet.itemReticleConfigs.put(index, entry.getValue().toPacket());
        }
        packet.maxId = assetMap.getNextIndex();
        return packet;
    }
    
    @Nonnull
    public Packet generateUpdatePacket(@Nonnull final IndexedLookupTableAssetMap<String, ItemReticleConfig> assetMap, @Nonnull final Map<String, ItemReticleConfig> loadedAssets) {
        final UpdateItemReticles packet = new UpdateItemReticles();
        packet.type = UpdateType.AddOrUpdate;
        packet.itemReticleConfigs = new Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.ItemReticleConfig>();
        for (final Map.Entry<String, ItemReticleConfig> entry : loadedAssets.entrySet()) {
            final String key = entry.getKey();
            final int index = assetMap.getIndex(key);
            if (index == Integer.MIN_VALUE) {
                throw new IllegalArgumentException("Unknown key! " + key);
            }
            packet.itemReticleConfigs.put(index, entry.getValue().toPacket());
        }
        packet.maxId = assetMap.getNextIndex();
        return packet;
    }
    
    @Nonnull
    public Packet generateRemovePacket(@Nonnull final IndexedLookupTableAssetMap<String, ItemReticleConfig> assetMap, @Nonnull final Set<String> removed) {
        final UpdateItemReticles packet = new UpdateItemReticles();
        packet.type = UpdateType.Remove;
        packet.itemReticleConfigs = new Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.ItemReticleConfig>();
        for (final String key : removed) {
            final int index = assetMap.getIndex(key);
            if (index == Integer.MIN_VALUE) {
                throw new IllegalArgumentException("Unknown key! " + key);
            }
            packet.itemReticleConfigs.put(index, null);
        }
        packet.maxId = assetMap.getNextIndex();
        return packet;
    }
}
