using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using XF.Material.Forms.Resources.Typography;

namespace InABox.Mobile
{
    public class MobileSearchBarTextChangedArgs : EventArgs
    {
        public string Text { get; private set; }

        public MobileSearchBarTextChangedArgs(String text)
        {
            Text = text;
        }
    }

    public delegate void MobileSearchBatTextChanged(object sender, MobileSearchBarTextChangedArgs args);
    
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MobileSearchBar
    {
        
        private static readonly BindableProperty BorderColorProperty = BindableProperty.Create(
            nameof(BorderColor),
            typeof(Color),
            typeof(MobileSearchBar),
            Color.Gray);

        public Color BorderColor
        {
            get => (Color)GetValue(BorderColorProperty);
            set => SetValue(BorderColorProperty, value);
        }
        
        private static readonly BindableProperty TextBackgroundColorProperty = BindableProperty.Create(
            nameof(TextBackgroundColor),
            typeof(Color),
            typeof(MobileSearchBar),
            XF.Material.Forms.Material.Color.Surface);

        public Color TextBackgroundColor
        {
            get => (Color)GetValue(TextBackgroundColorProperty);
            set => SetValue(TextBackgroundColorProperty, value);
        }
        
        private static readonly BindableProperty TextColorProperty = BindableProperty.Create(
            nameof(TextColor),
            typeof(Color),
            typeof(MobileSearchBar),
            XF.Material.Forms.Material.Color.OnSurface);

        public Color TextColor
        {
            get => (Color)GetValue(TextColorProperty);
            set => SetValue(TextColorProperty, value);
        }

        private static readonly BindableProperty TextSizeProperty = BindableProperty.Create(
            nameof(TextSize), 
            typeof(double), 
            typeof(MobileSearchBar), 
            16D);
        
        public double TextSize
        {
            get => (double)GetValue(TextSizeProperty);
            set => SetValue(TextSizeProperty, value);
        }

        private static readonly BindableProperty PlaceHolderProperty = BindableProperty.Create(
            nameof(PlaceHolder), 
            typeof(String),
            typeof(MobileSearchBar)
        );
        
        public String PlaceHolder
        {
            get => (String)GetValue(PlaceHolderProperty);
            set => SetValue(PlaceHolderProperty, value);
        }
        
        public event MobileSearchBatTextChanged TextChanged;
        
        public MobileSearchBar()
        {
            InitializeComponent();
        }

        private void _search_OnTextChanged(object sender, TextChangedEventArgs e)
        {
            TextChanged?.Invoke(this,new MobileSearchBarTextChangedArgs(e.NewTextValue));
        }
    }
}