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

package com.hypixel.hytale.builtin.hytalegenerator.framework.shaders;

import java.util.HashMap;
import javax.annotation.Nonnull;
import java.util.Map;

public class RelationalShader<T> implements Shader<T>
{
    @Nonnull
    private final Map<T, Shader<T>> relations;
    @Nonnull
    private final Shader<T> onMissingKey;
    
    public RelationalShader(@Nonnull final Shader<T> onMissingKey) {
        this.onMissingKey = onMissingKey;
        this.relations = new HashMap<T, Shader<T>>(1);
    }
    
    @Nonnull
    public RelationalShader<T> addRelation(@Nonnull final T key, @Nonnull final Shader<T> value) {
        this.relations.put(key, value);
        return this;
    }
    
    @Override
    public T shade(final T current, final long seed) {
        if (!this.relations.containsKey(current)) {
            return this.onMissingKey.shade(current, seed);
        }
        return this.relations.get(current).shade(current, seed);
    }
    
    @Override
    public T shade(final T current, final long seedA, final long seedB) {
        if (!this.relations.containsKey(current)) {
            return this.onMissingKey.shade(current, seedA, seedB);
        }
        return this.relations.get(current).shade(current, seedA, seedB);
    }
    
    @Override
    public T shade(final T current, final long seedA, final long seedB, final long seedC) {
        if (!this.relations.containsKey(current)) {
            return this.onMissingKey.shade(current, seedA, seedB, seedC);
        }
        return this.relations.get(current).shade(current, seedA, seedB, seedC);
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "RelationalShader{relations=" + String.valueOf(this.relations) + ", onMissingKey=" + String.valueOf(this.onMissingKey);
    }
}
