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

package com.hypixel.hytale.server.npc.blackboard.view.attitude;

import java.util.Set;
import com.hypixel.hytale.assetstore.AssetRegistry;
import com.hypixel.hytale.server.core.asset.type.item.config.Item;
import java.util.HashMap;
import com.hypixel.hytale.server.npc.config.ItemAttitudeGroup;
import javax.annotation.Nullable;
import com.hypixel.hytale.server.core.inventory.ItemStack;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.npc.entities.NPCEntity;
import com.hypixel.hytale.server.core.asset.type.attitude.Attitude;
import java.util.Map;

public class ItemAttitudeMap
{
    private final Map<String, Attitude>[] map;
    
    private ItemAttitudeMap(final Map<String, Attitude>[] map) {
        this.map = map;
    }
    
    @Nullable
    public Attitude getAttitude(@Nonnull final NPCEntity parent, @Nullable final ItemStack item) {
        if (item == null) {
            return null;
        }
        final int group = parent.getRole().getWorldSupport().getItemAttitudeGroup();
        if (group == Integer.MIN_VALUE) {
            return null;
        }
        final Map<String, Attitude> attitudeMap = this.map[group];
        if (attitudeMap == null) {
            return null;
        }
        final String targetId = item.getItemId();
        return attitudeMap.get(targetId);
    }
    
    public int getAttitudeGroupCount() {
        return this.map.length;
    }
    
    public void updateAttitudeGroup(final int id, @Nonnull final ItemAttitudeGroup group) {
        final Map<String, Attitude> groupMap = Builder.createGroupMap(group);
        this.map[id] = groupMap;
    }
    
    public static class Builder
    {
        private final Map<String, Attitude>[] map;
        
        public Builder() {
            this.map = new HashMap[ItemAttitudeGroup.getAssetMap().getNextIndex()];
        }
        
        public void addAttitudeGroups(@Nonnull final Map<String, ItemAttitudeGroup> groups) {
            groups.forEach((id, group) -> this.addAttitudeGroup(group));
        }
        
        private void addAttitudeGroup(@Nonnull final ItemAttitudeGroup group) {
            final String key = group.getId();
            final int index = ItemAttitudeGroup.getAssetMap().getIndex(key);
            if (index == Integer.MIN_VALUE) {
                throw new IllegalArgumentException("Unknown key! " + key);
            }
            this.map[index] = createGroupMap(group);
        }
        
        @Nonnull
        private static Map<String, Attitude> createGroupMap(@Nonnull final ItemAttitudeGroup group) {
            final HashMap<String, Attitude> groupMap = new HashMap<String, Attitude>();
            for (final Attitude attitude : Attitude.VALUES) {
                putGroups(group.getAttitudes().get(attitude), attitude, groupMap);
            }
            return groupMap;
        }
        
        private static void putGroups(@Nullable final String[] group, final Attitude targetAttitude, @Nonnull final HashMap<String, Attitude> targetMap) {
            if (group == null) {
                return;
            }
            for (final String item : group) {
                final Set<String> set = Item.getAssetMap().getKeysForTag(AssetRegistry.getOrCreateTagIndex(item));
                if (set != null) {
                    set.forEach(k -> targetMap.put(k, targetAttitude));
                }
            }
        }
        
        @Nonnull
        public ItemAttitudeMap build() {
            return new ItemAttitudeMap(this.map);
        }
    }
}
