using System;
using Xamarin.Forms;

namespace Billing.UI
{
    public class TintImage : Image
    {
        public static readonly BindableProperty PrimaryColorProperty = BindableProperty.Create(nameof(PrimaryColor), typeof(Color?), typeof(TintImage));

        public Color? PrimaryColor
        {
            get => (Color?)GetValue(PrimaryColorProperty);
            set => SetValue(PrimaryColorProperty, value);
        }
    }

    public class LongPressButton : Button
    {
        public event EventHandler LongPressed;

        public LongPressButton()
        {
            Padding = 0;
            BackgroundColor = Color.Transparent;
        }

        public void TriggerLongPress()
        {
            LongPressed?.Invoke(this, EventArgs.Empty);
        }
    }

    public class LongPressGrid : Grid
    {
        public static readonly BindableProperty LongCommandProperty = BindableProperty.Create(nameof(LongCommand), typeof(Command), typeof(LongPressGrid));
        public static readonly BindableProperty LongCommandParameterProperty = BindableProperty.Create(nameof(LongCommandParameter), typeof(object), typeof(LongPressGrid));

        public Command LongCommand
        {
            get => (Command)GetValue(LongCommandProperty);
            set => SetValue(LongCommandProperty, value);
        }
        public object LongCommandParameter
        {
            get => GetValue(LongCommandParameterProperty);
            set => SetValue(LongCommandParameterProperty, value);
        }

        public void TriggerLongPress()
        {
            var command = LongCommand;
            if (command == null)
            {
                return;
            }
            var parameter = LongCommandParameter;
            if (command.CanExecute(parameter))
            {
                command.Execute(parameter);
            }
        }
    }
}