﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Composite.Functions;
using Composite.Functions.Plugins.WidgetFunctionProvider;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder;
using Microsoft.Practices.ObjectBuilder;

namespace Composite.Samples.CustomWidgetProvider
{
	[ConfigurationElementType(typeof(MyWidgetFunctionProviderData))]
	public class CustomWidgetFunctionProvider : IWidgetFunctionProvider
	{

		public IEnumerable<IWidgetFunction> Functions
		{
			get
			{
				yield return new SimpleTextWidgetFunction("CustomTreeInput", "Sample input widget with a tree picker");
				yield return new SimpleTextWidgetFunction("CustomFormInput", "Sample input widget with a form picker");
			}
		}

		public WidgetFunctionNotifier WidgetFunctionNotifier
		{
			set { }
		}
	}

	[Assembler(typeof(MyWidgetFunctionProviderAssembler))]
	public class MyWidgetFunctionProviderData : WidgetFunctionProviderData
	{
		// No custom configuration in this sample...
	}

	public sealed class MyWidgetFunctionProviderAssembler
			: IAssembler<IWidgetFunctionProvider, WidgetFunctionProviderData>
	{
		public IWidgetFunctionProvider Assemble(IBuilderContext context,
				WidgetFunctionProviderData objectConfiguration, IConfigurationSource configurationSource,
				ConfigurationReflectionCache reflectionCache)
		{
			return new CustomWidgetFunctionProvider();
		}
	}

}
