<?php

/**
 * Represents a composite field group, which may contain other groups
 */
abstract class UserFormsCompositeField extends CompositeField implements UserFormsFieldContainer
{

    /**
     * Parent field
     *
     * @var UserFormsFieldContainer
     */
    protected $parent = null;

    public function getParent()
    {
        return $this->parent;
    }

    public function setParent(UserFormsFieldContainer $parent)
    {
        $this->parent = $parent;
        return $this;
    }

    public function processNext(EditableFormField $field)
    {
        // When we find a step, bubble up to the top
        if ($field instanceof EditableFormStep) {
            return $this->getParent()->processNext($field);
        }

        // Skip over fields that don't generate formfields
        $formField = $field->getFormField();
        if (!$formField) {
            return $this;
        }

        // Save this field
        $this->push($formField);

        // Nest fields that are containers
        if ($formField instanceof UserFormsFieldContainer) {
            return $formField->setParent($this);
        }

        // Add any subsequent fields to this
        return $this;
    }
}