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

package com.hypixel.hytale.builtin.adventure.reputation.choices;

import com.hypixel.hytale.codec.validation.Validator;
import com.hypixel.hytale.builtin.adventure.reputation.assets.ReputationGroup;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.builtin.adventure.reputation.assets.ReputationRank;
import com.hypixel.hytale.builtin.adventure.reputation.ReputationPlugin;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Store;
import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.server.core.entity.entities.player.pages.choices.ChoiceRequirement;

public class ReputationRequirement extends ChoiceRequirement
{
    @Nonnull
    public static final BuilderCodec<ReputationRequirement> CODEC;
    protected String reputationGroupId;
    protected String minRequiredRankId;
    
    public ReputationRequirement(final String reputationGroupId, final String minRequiredRankId) {
        this.reputationGroupId = reputationGroupId;
        this.minRequiredRankId = minRequiredRankId;
    }
    
    protected ReputationRequirement() {
    }
    
    @Override
    public boolean canFulfillRequirement(@Nonnull final Store<EntityStore> store, @Nonnull final Ref<EntityStore> ref, @Nonnull final PlayerRef playerRef) {
        final ReputationPlugin reputationModule = ReputationPlugin.get();
        final int playerReputationValue = reputationModule.getReputationValue(store, ref, this.reputationGroupId);
        if (playerReputationValue == Integer.MIN_VALUE) {
            return false;
        }
        final ReputationRank minReputationRank = ReputationRank.getAssetMap().getAsset(this.minRequiredRankId);
        return minReputationRank != null && playerReputationValue >= minReputationRank.getMinValue();
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "ReputationRequirement{reputationGroupId='" + this.reputationGroupId + "', minRequiredRankId='" + this.minRequiredRankId + "'} " + super.toString();
    }
    
    static {
        CODEC = BuilderCodec.builder(ReputationRequirement.class, ReputationRequirement::new, ChoiceRequirement.BASE_CODEC).append(new KeyedCodec<String>("ReputationGroupId", Codec.STRING), (reputationRequirement, s) -> reputationRequirement.reputationGroupId = s, reputationRequirement -> reputationRequirement.reputationGroupId).addValidator(ReputationGroup.VALIDATOR_CACHE.getValidator()).add().append(new KeyedCodec("MinRequiredRankId", Codec.STRING), (reputationRequirement, s) -> reputationRequirement.minRequiredRankId = s, reputationRequirement -> reputationRequirement.minRequiredRankId).addValidator(ReputationRank.VALIDATOR_CACHE.getValidator()).add().build();
    }
}
