using Models;
using System.Collections.Immutable;
namespace Services
{
///
/// This service handles the preferences of a bound account
///
public interface IAccountRecipesPreferencesService
{
///
/// The bound account
///
public Account Account { get; }
///
/// Adds a recipe in the favorites of the bound account
///
/// The information about the recipe to add in favorites
public void AddToFavorites(RecipeInfo info);
///
/// Removes a recipe from the favorites of the bound account
///
/// The information about the recipe to remove from favorites
public void RemoveFromFavorites(RecipeInfo info);
///
/// Sets a score for the specified recipe
///
/// The information about the targeted recipe
/// The score to set
public void SetReviewScore(RecipeInfo info, uint score);
///
/// Adds a recipe to the weekly list, specifying the amount of persons that must be fed for the week
///
/// The information about the targeted recipe
/// The amount of guests that needs to be fed by the recipe for the week
///
public bool AddToWeeklyList(RecipeInfo info, uint persAmount);
///
/// Retrieves the rate of the targeted recipe
/// The rate contains the user's score and whether if the recipe is in the favorites list.
///
///
/// The information about the targeted recipe
///
public RecipeRate GetRate(RecipeInfo info);
///
/// The favorites recipes of the account
///
/// A list containing all the recipe info that are marked as favorite by the bound account
public ImmutableList GetFavorites();
///
/// The recommended recipes for the user based on his preferences.
///
/// A list of the recommended recipes based on the preferences of the bound account
public ImmutableList GetRecommendedRecipes();
///
/// The weekly list of the bound account
///
/// The weekly list of the bound account, containing tuples that binds a recipe to the number of guests to feed for the week
public ImmutableList<(RecipeInfo, uint)> GetWeeklyList();
}
}