package at.hannibal2.skyhanni.features.bingo import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUItems.getCachedIngredients import at.hannibal2.skyhanni.utils.StringUtils.removeColor import io.github.moulberry.notenoughupdates.recipes.CraftingRecipe object FirstMinionTier { fun firstMinionTier( otherItems: Map, minions: MutableMap, tierOneMinions: MutableList, tierOneMinionsDone: MutableSet, ) { val help = helpMap(otherItems) val tierOneMinionsFiltered = getTierOneMinionsFiltered(tierOneMinions, tierOneMinionsDone) addMinion(tierOneMinionsFiltered, minions, tierOneMinionsDone) addMoreMinions(tierOneMinionsFiltered, help, minions) } private fun addMoreMinions( tierOneMinionsFiltered: List, help: Map, minions: MutableMap, ) { for (minionId in tierOneMinionsFiltered) { for (recipe in NEUItems.getRecipes(minionId)) { if (recipe !is CraftingRecipe) continue checkOne(recipe, help, minions, minionId) } } } private fun checkOne( recipe: CraftingRecipe, help: Map, minions: MutableMap, minionId: NEUInternalName, ) { if (recipe.getCachedIngredients().any { help.contains(it.internalItemId.asInternalName()) }) { val name = recipe.output.itemStack.name.removeColor() val abc = name.replace(" I", " 0") minions[abc] = minionId.replace("_1", "_0") } } private fun addMinion( tierOneMinionsFiltered: List, minions: MutableMap, tierOneMinionsDone: MutableSet, ) { for (minionId in tierOneMinionsFiltered) { val prefix = minionId.asString().dropLast(1) if (minions.any { it.value.startsWith(prefix) }) { val successful = tierOneMinionsDone.add(minionId) if (!successful) { ErrorManager.logErrorWithData( IllegalStateException("Attempted to add $minionId to tierOneMinionsDone when it already exists"), "Attempted to add $minionId to tierOneMinionsDone when it already exists", "tierOneMinionsFiltered" to tierOneMinionsFiltered, "minions" to minions, "tierOneMinionsDone" to tierOneMinionsDone ) } } } } private fun getTierOneMinionsFiltered( tierOneMinions: MutableList, tierOneMinionsDone: MutableSet, ) = tierOneMinions.filter { it !in tierOneMinionsDone } private fun helpMap(otherItems: Map) = otherItems.filter { !it.key.startsWith("WOOD_") } }