// 
// 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.UpdateItemQualities;
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.ItemQuality;
import com.hypixel.hytale.server.core.asset.packet.SimpleAssetPacketGenerator;

public class ItemQualityPacketGenerator extends SimpleAssetPacketGenerator<String, ItemQuality, IndexedLookupTableAssetMap<String, ItemQuality>>
{
    @Nonnull
    @Override
    public Packet generateInitPacket(@Nonnull final IndexedLookupTableAssetMap<String, ItemQuality> assetMap, @Nonnull final Map<String, ItemQuality> assets) {
        final UpdateItemQualities packet = new UpdateItemQualities();
        packet.type = UpdateType.Init;
        packet.itemQualities = new Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.ItemQuality>();
        for (final Map.Entry<String, ItemQuality> 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.itemQualities.put(index, entry.getValue().toPacket());
        }
        packet.maxId = assetMap.getNextIndex();
        return packet;
    }
    
    @Nonnull
    @Override
    protected Packet generateUpdatePacket(@Nonnull final IndexedLookupTableAssetMap<String, ItemQuality> assetMap, @Nonnull final Map<String, ItemQuality> loadedAssets) {
        final UpdateItemQualities packet = new UpdateItemQualities();
        packet.type = UpdateType.AddOrUpdate;
        packet.itemQualities = new Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.ItemQuality>();
        for (final Map.Entry<String, ItemQuality> 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.itemQualities.put(index, entry.getValue().toPacket());
        }
        packet.maxId = assetMap.getNextIndex();
        return packet;
    }
    
    @Nonnull
    @Override
    protected Packet generateRemovePacket(@Nonnull final IndexedLookupTableAssetMap<String, ItemQuality> assetMap, @Nonnull final Set<String> removed) {
        final UpdateItemQualities packet = new UpdateItemQualities();
        packet.type = UpdateType.Remove;
        packet.itemQualities = new Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.ItemQuality>();
        for (final String key : removed) {
            final int index = assetMap.getIndex(key);
            if (index == Integer.MIN_VALUE) {
                throw new IllegalArgumentException("Unknown key! " + key);
            }
            packet.itemQualities.put(index, null);
        }
        packet.maxId = assetMap.getNextIndex();
        return packet;
    }
}
