/*
© 2017 Altavant Technologies Inc.
Web: http://www.altavant.com
*/

namespace Altavant.Fusion.Layouting
{
	using System;
	using System.Collections.Generic;
	using Fusion.Layouting.Shapes;
	using Fusion.Layouting.Text;
	using Fusion.Layouting.Grid;
	using Fusion.Layouting.Slot;
	using Fusion.Layouting.List;
	using Fusion.Layouting.Repeater;
	using Fusion.Layouting.Data;

	public interface ISite : IElement, IBindable
	{
		Width Width { get; set; }
		Height Height { get; set; }
		Borders Borders { get; set; }
		Spacings Spacings { get; set; }
		Paddings Paddings { get; set; }
		Background Background { get; set; }
		Foreground Foreground { get; set; }
		bool Stretch { get; set; }
		Visibility Visibility { get; set; }
		IShapes Shapes { get; }
		ICaption AddCaption(float start, float top);
		ICaption AddCaption(float start, float top, float angle);
		IText AddText(float start, float top);
		IText AddText(float start, float top, float angle);
		IImage AddImage(float start, float top);
		IImage AddImage(float start, float top, float angle);
		IImage AddImage(Fusion.Graphics.Image image, float start, float top);
		IImage AddImage(Fusion.Graphics.Image image, float start, float top, float angle);
		IShape AddShape(float start, float top);
		IShape AddShape(float start, float top, float angle);
		IShape AddShape(Fusion.Shape.Shape shape, float start, float top);
		IShape AddShape(Fusion.Shape.Shape shape, float start, float top, float angle);
		IGroup AddGroup(float start, float top);
		IGroup AddGroup(float start, float top, float angle);
		IContour AddContour(float start, float top);
		IContour AddContour(float start, float top, float angle);
		ISelector AddSelector(float start, float top);
		ISelector AddSelector(float start, float top, float angle);
		IRule AddRule(float start, float top);
		IRule AddRule(float start, float top, float angle);
		IStack AddStack(float start, float top);
		IStack AddStack(float start, float top, float angle);
		IBand AddBand(float start, float top);
		IBand AddBand(float start, float top, float angle);
		IGrid AddGrid(float start, float top);
		IGrid AddGrid(float start, float top, float angle);
		ISlot AddSlot(float start, float top);
		ISlot AddSlot(float start, float top, float angle);
		IList AddList(float start, float top);
		IList AddList(float start, float top, float angle);
		IRepeater AddRepeater(float start, float top);
		IRepeater AddRepeater(float start, float top, float angle);
		IPlace AddPlace(float start, float top);
		IPlace AddPlace(float start, float top, float angle);
		ISite AddSite(float start, float top);
		ISite AddSite(float start, float top, float angle);
		ICanvas AddCanvas(float start, float top);
		ICanvas AddCanvas(float start, float top, float angle);
		IPlaceholder AddPlaceholder(float start, float top);
		IPlaceholder AddPlaceholder(float start, float top, float angle);
		void Clear();
		void Remove(IElement element);
		IElement Find(Predicate<IElement> match);
		IElement Find(Func<IElement, int, bool> match);
		List<IElement> Select(Predicate<IElement> match);
		List<IElement> Select(Func<IElement, int, bool> match);
		void Perform(Predicate<IElement> match, Action<IElement> action);
		void Perform(Func<IElement, int, bool> match, Action<IElement> action);
	}
}