using System;
using System.Collections.Generic;
using Xamarin.Forms;
using Aurora.Design.Components.HorizontalList;
using Aurora.Models;

namespace Aurora.Design.Components.MemberList
{
    public partial class MemberList : ContentView
    {
        public MemberList()
        {
            InitializeComponent();

        }

        /// <summary>
        /// Bindable property for members list.
        /// </summary>
        /// <param name=""Members""></param>
        /// <param name="typeof(IEnumerable<string>"></param>
        /// <returns></returns>
        public static readonly BindableProperty MembersProperty =
            BindableProperty.Create(propertyName: "Members",
            returnType: typeof(IEnumerable<PartyMember>),
            declaringType: typeof(MemberList),
            defaultBindingMode: BindingMode.Default,
            propertyChanged: OnMembersChanged);

        /// <summary>
        /// Backing property for MembersProperty
        /// </summary>
        /// <value></value>
        public IEnumerable<PartyMember> Members
        {
            get
            {
                return (IEnumerable<PartyMember>)GetValue(MembersProperty);
            }
            set
            {
                SetValue(MembersProperty, value);
            }
        }

        /// <summary>
        /// Memberes changed event handler. Assign member list source.
        /// </summary>
        /// <param name="bindable"></param>
        /// <param name="oldValue"></param>
        /// <param name="newValue"></param>
        private static void OnMembersChanged(BindableObject bindable, object oldValue, object newValue)
        {
            var control = (MemberList)bindable;
            var membersList = control.FindByName("MembersHorizontalList") as HorizontalList.HorizontalList;
            if (membersList != null)
            {
                membersList.ItemsSource = newValue as IEnumerable<PartyMember>;
            }
        }
    }
}