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

namespace Todo
{
	public class TodoListPage : ContentPage
	{
		ListView listView;

		public TodoListPage ()
		{
			Title = "Todo";

			NavigationPage.SetHasNavigationBar (this, true);

			listView = new ListView {
				RowHeight = 40,
				ItemTemplate = new DataTemplate (typeof(TodoItemCell))
			};

			// These commented-out lines were used to test the ListView prior to integrating the database
//			listView.ItemsSource = new string [] { "Buy pears", "Buy oranges", "Buy mangos", "Buy apples", "Buy bananas" };
//			listView.ItemsSource = new TodoItem [] { 
//				new TodoItem {Name = "Buy pears`"}, 
//				new TodoItem {Name = "Buy oranges`", Done=true},
//				new TodoItem {Name = "Buy mangos`"}, 
//				new TodoItem {Name = "Buy apples`", Done=true},
//				new TodoItem {Name = "Buy bananas`", Done=true}
//			};

			listView.ItemSelected += (sender, e) => {
				var todoItem = (TodoItem)e.SelectedItem;
				var todoPage = new TodoItemPage ();
				todoPage.BindingContext = todoItem;
				Navigation.PushAsync (todoPage);
			};

			var layout = new StackLayout ();
			if (Device.OS == TargetPlatform.WinPhone) { // WinPhone doesn't have the title showing
				layout.Children.Add (new Label {
					Text = "Todo",
					FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label)),
					FontAttributes = FontAttributes.Bold
				});
			}
			layout.Children.Add (listView);
			layout.VerticalOptions = LayoutOptions.FillAndExpand;
			Content = layout;


			ToolbarItem tbi = null;
			if (Device.OS == TargetPlatform.iOS) {
				tbi = new ToolbarItem ("+", null, () => {
					var todoItem = new TodoItem ();
					var todoPage = new TodoItemPage ();
					todoPage.BindingContext = todoItem;
					Navigation.PushAsync (todoPage);
				}, 0, 0);
			}
			if (Device.OS == TargetPlatform.Android) { // BUG: Android doesn't support the icon being null
				tbi = new ToolbarItem ("+", "plus", () => {
					var todoItem = new TodoItem ();
					var todoPage = new TodoItemPage ();
					todoPage.BindingContext = todoItem;
					Navigation.PushAsync (todoPage);
				}, 0, 0);
			}

			if (Device.OS == TargetPlatform.WinPhone) {
				tbi = new ToolbarItem ("Add", "add.png", () => {
					var todoItem = new TodoItem ();
					var todoPage = new TodoItemPage ();
					todoPage.BindingContext = todoItem;
					Navigation.PushAsync (todoPage);
				}, 0, 0);
			}

			ToolbarItems.Add (tbi);

			if (Device.OS == TargetPlatform.iOS) {
				var tbi2 = new ToolbarItem ("?", null, () => {
					var todos = App.Database.GetItemsNotDone ();
					var tospeak = "";
					foreach (var t in todos)
						tospeak += t.Name + " ";
					if (tospeak == "")
						tospeak = "there are no tasks to do";

					DependencyService.Get<ITextToSpeech> ().Speak (tospeak);
				}, 0, 0);
				ToolbarItems.Add (tbi2);
			}
		}

		protected override void OnAppearing ()
		{
			base.OnAppearing ();
			listView.ItemsSource = App.Database.GetItems ();
		}
	}
}

