package stsjorbsmod.actions;

import com.megacrit.cardcrawl.actions.AbstractGameAction;
import com.megacrit.cardcrawl.core.AbstractCreature;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import stsjorbsmod.memories.AbstractMemory;
import stsjorbsmod.memories.MemoryManager;
import stsjorbsmod.memories.MemoryUtils;

import java.util.ArrayList;
import java.util.function.Predicate;

public class GainRandomNewClarityAction extends AbstractGameAction  {
    private Predicate<AbstractMemory> clarityFilter;

    public GainRandomNewClarityAction(AbstractCreature target, Predicate<AbstractMemory> clarityFilter) {
        this.setValues(target, target);
        this.clarityFilter = clarityFilter;
    }

    public void update() {
        ArrayList<AbstractMemory> candidates = MemoryUtils.allPossibleMemories(null);
        candidates.removeIf(memory -> !clarityFilter.test(memory));
        candidates.removeIf(memory -> MemoryManager.forPlayer(target).hasClarity(memory.ID));

        if (!candidates.isEmpty()) {
            int randomIndex = AbstractDungeon.cardRandomRng.random(0, candidates.size() - 1);
            String chosenMemoryID = candidates.get(randomIndex).ID;
            AbstractDungeon.actionManager.addToTop(new GainSpecificClarityAction(target, chosenMemoryID));
        }

        isDone = true;
    }
}