package ui

import (
	"opslag.de/schobers/geom"
)

type ContainerBase struct {
	ControlBase
	Children []Control
}

func BuildContainerBase(controls ...Control) ContainerBase {
	return ContainerBase{
		Children: controls,
	}
}

func (c *ContainerBase) AddChild(child ...Control) {
	c.Children = append(c.Children, child...)
}

func (c *ContainerBase) Arrange(ctx Context, bounds geom.RectangleF32, offset geom.PointF32, parent Control) {
	for _, child := range c.Children {
		child.Arrange(ctx, bounds, offset, c)
	}
	c.ControlBase.Arrange(ctx, bounds, offset, parent)
}

func (c *ContainerBase) DesiredSize(ctx Context, size geom.PointF32) geom.PointF32 {
	var max geom.PointF32
	for _, child := range c.Children {
		s := child.DesiredSize(ctx, size)
		max = geom.MaxPtF32(max, s)
	}
	return max
}

func (c *ContainerBase) Handle(ctx Context, e Event) bool {
	if c.ControlBase.Handle(ctx, e) {
		return true
	}
	for _, child := range c.Children {
		if child.Handle(ctx, e) {
			return true
		}
	}
	return false
}

func (c *ContainerBase) Render(ctx Context) {
	c.RenderBackground(ctx)
	for _, child := range c.Children {
		child.Render(ctx)
	}
}