package mi.hdm.recipes;

import mi.hdm.exceptions.InvalidRecipeException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.List;
import java.util.Optional;

public class RecipeManager {
    private final List<Recipe> recipes;
    private final CategoryManager categories;
    private final IngredientManager ingredients;
    private final NutritionCalculator nutritionCalculator;
    private static final Logger log = LogManager.getLogger(RecipeManager.class);

    public RecipeManager(List<Recipe> recipes, CategoryManager categories, IngredientManager ingredients, NutritionCalculator nutritionCalculator) {
        this.recipes = recipes;
        this.categories = categories;
        this.ingredients = ingredients;
        this.nutritionCalculator = nutritionCalculator;
    }

    public void addRecipe(Recipe recipe){
        if (getRecipeByName(recipe.getName()).isEmpty()) {
            recipes.add(recipe);
        } else {
            throw new InvalidRecipeException("Recipe name already exists");
        }
    }

    public Recipe deleteRecipe(int i) {
        return recipes.remove(i);
    }

    public boolean deleteRecipe(String name) {
        Recipe r = getRecipeByName(name).orElseThrow();
        return recipes.remove(r);
    }

    private Optional<Recipe> getRecipeByName(String name) {
        for (final Recipe r : recipes) {
            if (name.equals(r.getName())) {
                return Optional.of(r);
            }
        }
        return Optional.empty();
    }

}