from typing import List from .recipe import V60, ESPRESSO, Recipe, Step, StepType class RecipeManager: def __init__(self): self.recipes = [ V60, ESPRESSO ] self.tmp_recipe = None self.active_recipe: Recipe = None self.current_recipe_step_id = 0 def add_recipe(self, recipe): self.recipes.append(recipe) def update_recipe(self, recipe_id, new_recipe): self.recipes[recipe_id] = new_recipe def remove_recipe(self, recipe): self.recipes.remove(recipe) def get_recipe_id(self, recipe): return self.recipes.index(recipe) def get_recipe(self, recipe_id) -> Recipe: if recipe_id is None: return self.tmp_recipe return self.recipes[recipe_id] def activate_recipe(self, recipe_id): self.active_recipe = self.get_recipe(recipe_id) def deactivate_recipe(self): self.active_recipe = None self.current_recipe_step_id = 0 def get_current_step(self) -> List[Step]: steps = [None] * 3 if self.active_recipe is None: return steps if self.current_recipe_step_id > len(self.active_recipe.steps): return steps if self.current_recipe_step_id > 0: steps[0] = self.active_recipe.steps[self.current_recipe_step_id - 1] if self.current_recipe_step_id < len(self.active_recipe.steps): steps[1] = self.active_recipe.steps[self.current_recipe_step_id] elif self.current_recipe_step_id == len(self.active_recipe.steps): steps[1] = Step(StepType.SECTION, "Enjoy") if self.current_recipe_step_id < len(self.active_recipe.steps) - 1: steps[2] = self.active_recipe.steps[self.current_recipe_step_id + 1] return steps def next_step(self) -> List[Step]: if self.active_recipe is None: return [None] * 3 self.current_recipe_step_id = min(self.current_recipe_step_id + 1, len(self.active_recipe.steps) + 1) return self.get_current_step() def previous_step(self) -> List[Step]: if self.active_recipe is None: return [None] * 3 self.current_recipe_step_id = max(0, self.current_recipe_step_id - 1) return self.get_current_step()