package crazypants.enderio.machine;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class MachineRecipeRegistry {
public static final MachineRecipeRegistry instance = new MachineRecipeRegistry();
private final Map<String, Map<String, IMachineRecipe>> machineRecipes = new HashMap<String, Map<String, IMachineRecipe>>();
public void registerRecipe(String machine, IMachineRecipe recipe) {
getRecipesForMachine(machine).put(recipe.getUid(), recipe);
}
public Map<String, IMachineRecipe> getRecipesForMachine(String machineName) {
Map<String, IMachineRecipe> res = machineRecipes.get(machineName);
if(res == null) {
res = new LinkedHashMap<String, IMachineRecipe>();
machineRecipes.put(machineName, res);
}
return res;
}
public IMachineRecipe getRecipeForUid(String uid) {
if(uid == null) {
return null;
}
for (Map<String, IMachineRecipe> recipes : machineRecipes.values()) {
for (IMachineRecipe recipe : recipes.values()) {
if(uid.equals(recipe.getUid())) {
return recipe;
}
}
}
return null;
}
public IMachineRecipe getRecipeForInputs(String machineName, MachineRecipeInput... inputs) {
Map<String, IMachineRecipe> recipes = getRecipesForMachine(machineName);
if(recipes == null) {
return null;
}
for (IMachineRecipe recipe : recipes.values()) {
if(recipe.isRecipe(inputs)) {
return recipe;
}
}
return null;
}
public List<IMachineRecipe> getRecipesForInput(String machineName, MachineRecipeInput input) {
if(input == null) {
return Collections.emptyList();
}
List<IMachineRecipe> result = new ArrayList<IMachineRecipe>();
Map<String, IMachineRecipe> recipes = getRecipesForMachine(machineName);
for (IMachineRecipe recipe : recipes.values()) {
if(recipe.isValidInput(input)) {
result.add(recipe);
}
}
return result;
}
}