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

package com.hypixel.hytale.server.npc.role.support;

import java.util.Arrays;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import javax.annotation.Nullable;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntSet;
import java.util.EnumMap;

public class RoleStats
{
    protected final EnumMap<RangeType, IntSet> playerRanges;
    protected final EnumMap<RangeType, IntSet> npcRanges;
    @Nullable
    protected IntArrayList playerBucketRanges;
    @Nullable
    protected IntArrayList npcBucketRanges;
    
    public RoleStats() {
        this.playerRanges = new EnumMap<RangeType, IntSet>(RangeType.class);
        this.npcRanges = new EnumMap<RangeType, IntSet>(RangeType.class);
    }
    
    public void clear() {
        this.playerRanges.clear();
        this.npcRanges.clear();
        this.playerBucketRanges = null;
        this.npcBucketRanges = null;
    }
    
    public void trackRange(final boolean isPlayer, final RangeType type, final int value) {
        final EnumMap<RangeType, IntSet> map = isPlayer ? this.playerRanges : this.npcRanges;
        map.computeIfAbsent(type, t -> new IntOpenHashSet()).add(value);
    }
    
    public IntSet getRanges(final boolean isPlayer, final RangeType type) {
        final EnumMap<RangeType, IntSet> map = isPlayer ? this.playerRanges : this.npcRanges;
        return map.get(type);
    }
    
    public int[] getRangesSorted(final boolean isPlayer, final RangeType type) {
        final IntSet intSet = this.getRanges(isPlayer, type);
        if (intSet == null) {
            return null;
        }
        final int[] intArray = intSet.toIntArray();
        Arrays.sort(intArray);
        return intArray;
    }
    
    public void trackBuckets(final boolean isPlayer, final IntArrayList bucketRanges) {
        if (isPlayer) {
            this.playerBucketRanges = bucketRanges;
        }
        else {
            this.npcBucketRanges = bucketRanges;
        }
    }
    
    @Nullable
    public IntArrayList getBuckets(final boolean isPlayer) {
        return isPlayer ? this.playerBucketRanges : this.npcBucketRanges;
    }
    
    public enum RangeType
    {
        SORTED, 
        UNSORTED, 
        AVOIDANCE;
    }
}
