using System.Collections.Generic;
using System.Windows;

namespace OpenSEMI.ClientBase.Command
{
	public sealed class CommandTriggerGroup : FreezableCollection<CommandTrigger>, ICommandTrigger
	{
		private readonly HashSet<ICommandTrigger> _initList = new HashSet<ICommandTrigger>();

		void ICommandTrigger.Initialize(FrameworkElement source)
		{
			using (Enumerator enumerator = GetEnumerator())
			{
				while (enumerator.MoveNext())
				{
					ICommandTrigger current = enumerator.Current;
					if (!_initList.Contains(current))
					{
						InitializeCommandSource(source, current);
					}
				}
			}
		}

		private void InitializeCommandSource(FrameworkElement source, ICommandTrigger child)
		{
			child.Initialize(source);
			_initList.Add(child);
		}
	}
}