using ShoopNCook.Views;
using System.Windows.Input;

namespace ShoopNCook.Pages;

public partial class RecipePage : ContentPage
{

    private uint note;
	private uint nbPers;
    private bool isFavorite;

    public ICommand StarCommand => new Command<string>(count =>
    {
        SetNote(uint.Parse(count));
    });

    public RecipePage() :
        this("Recipe Sample", 32, 250,
            true, 2, 0,
            new List<IngredientView> {
                new IngredientView("Chocolate", 25, "g"),
                new IngredientView("Flour", 250, "g"),
                new IngredientView("Sugar", 0.5F, "kg")
            },
            new List<string> { "This is the first preparation step", "add to furnace and wait", "Enjoy !" }
        )
    {}

    public RecipePage(
        string name,
        uint cookTime,
        uint energy,
        bool isFavorite,
        uint nbPers,
        uint note,
        List<IngredientView> ingredients,
        List<string> steps
        )
    {
        InitializeComponent();
        SetNbPers(nbPers);
        SetFavorite(isFavorite);
        SetNote(note);

        CookTime.Text = cookTime.ToString();
        Energy.Text = energy.ToString();
        RecipeName.Text = name;

        foreach (IngredientView iv in ingredients)
            IngredientList.Add(iv);

        var styles = Application.Current.Resources.MergedDictionaries.ElementAt(1);

        int count = 0;
        foreach (string step in steps) {
            Label label = new Label();
            label.Style = (Style)styles["Small"];
            label.Text = "Step " + ++count + ": " + step;
            StepList.Add(label);
        }
    }

    private void SetNote(uint note)
    {
        this.note = note;
        int i = 1;
        foreach (ImageButton img in Stars.Children)
        {
            if (i <= note)
            {
                img.Source = ImageSource.FromFile("star_full.svg");
                i++;
            }
            else
            {
                img.Source = ImageSource.FromFile("star_empty.svg");
            }
        }
    }

    private void OnFavorite(object o, EventArgs e)
    {
        SetFavorite(!isFavorite);
    }

    private void SetFavorite(bool isFavorite)
    {
        this.isFavorite = isFavorite;
        if (isFavorite)
        {
            Favorite.Source = ImageSource.FromFile("hearth_on.svg");
        }
        else
        {
            Favorite.Source = ImageSource.FromFile("hearth_off.svg");
        }
    }

    private void OnPlus(object o, EventArgs e)
    {
        SetNbPers(nbPers + 1);
    }

    private void OnMinus(object o, EventArgs e)
    {
        SetNbPers(nbPers - 1);
    }

    private void SetNbPers(uint nbPers)
    {
        this.nbPers = nbPers <= 1 ? 1 : nbPers;
        NbPersLabel.Text = this.nbPers.ToString();
    }
}