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

package com.hypixel.hytale.builtin.adventure.camera.asset.camerashake;

import com.hypixel.hytale.assetstore.AssetMap;
import java.util.Iterator;
import com.hypixel.hytale.protocol.CachedPacket;
import com.hypixel.hytale.protocol.packets.assets.UpdateCameraShake;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.Set;
import com.hypixel.hytale.protocol.UpdateType;
import com.hypixel.hytale.protocol.Packet;
import java.util.Map;
import javax.annotation.Nonnull;
import com.hypixel.hytale.assetstore.map.IndexedAssetMap;
import com.hypixel.hytale.server.core.asset.packet.SimpleAssetPacketGenerator;

public class CameraShakePacketGenerator extends SimpleAssetPacketGenerator<String, CameraShake, IndexedAssetMap<String, CameraShake>>
{
    @Nonnull
    @Override
    public Packet generateInitPacket(@Nonnull final IndexedAssetMap<String, CameraShake> assetMap, @Nonnull final Map<String, CameraShake> assets) {
        return toCachedPacket(UpdateType.Init, assetMap, assets);
    }
    
    @Nonnull
    @Override
    protected Packet generateUpdatePacket(@Nonnull final IndexedAssetMap<String, CameraShake> assetMap, @Nonnull final Map<String, CameraShake> loadedAssets) {
        return toCachedPacket(UpdateType.AddOrUpdate, assetMap, loadedAssets);
    }
    
    @Nonnull
    @Override
    protected Packet generateRemovePacket(@Nonnull final IndexedAssetMap<String, CameraShake> assetMap, @Nonnull final Set<String> removed) {
        final Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.CameraShake> profiles = new Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.CameraShake>();
        for (final String key : removed) {
            final int index = assetMap.getIndex(key);
            profiles.put(index, null);
        }
        final UpdateCameraShake packet = new UpdateCameraShake();
        packet.type = UpdateType.Remove;
        packet.profiles = profiles;
        return CachedPacket.cache(packet);
    }
    
    @Nonnull
    protected static Packet toCachedPacket(final UpdateType type, @Nonnull final IndexedAssetMap<String, CameraShake> assetMap, @Nonnull final Map<String, CameraShake> assets) {
        final Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.CameraShake> profiles = new Int2ObjectOpenHashMap<com.hypixel.hytale.protocol.CameraShake>();
        for (final Map.Entry<String, CameraShake> entry : assets.entrySet()) {
            final int index = assetMap.getIndex(entry.getKey());
            profiles.put(index, entry.getValue().toPacket());
        }
        final UpdateCameraShake packet = new UpdateCameraShake();
        packet.type = type;
        packet.profiles = profiles;
        return CachedPacket.cache(packet);
    }
}
