using Models;

namespace ShoopNCook.Views;

public partial class OwnedRecipeView : ContentView
{

    private readonly Action clickCallback;
    private readonly Action removeCallback;
    private readonly RecipeInfo recipeInfo;

    public OwnedRecipeView(RecipeInfo info, Action onClickCallback, Action onRemoveCallback)
    {
        InitializeComponent();

        if (info.Image != null)
            RecipeImage.Source = ImageSource.FromUri(info.Image);
        Note = info.AverageNote;
        Title = info.Name;

        this.recipeInfo = info;
        this.clickCallback = onClickCallback;
        this.removeCallback = onRemoveCallback;
    }

    public bool IsViewing(RecipeInfo info)
    {
        return recipeInfo == info;
    }
    public float Note
    {
        set => SetNote(value);
    }

    public string Title
    {
        set => TitleLabel.Text = value;
    }

    private void SetNote(float note)
    {
        note = (uint)note; //truncate integer as we currently do not handle semi stars
        foreach (Image img in Stars.Children.Reverse())
        {
            if (note > 0)
            {
                img.Opacity = 1;
                note--;
            }
            else img.Opacity = 0;
        }
    }

    private void OnViewTapped(object sender, TappedEventArgs e)
    {
        clickCallback();
    }

    private void OnRemoveButtonTapped(object sender, TappedEventArgs e)
    {
        removeCallback();
    }
}