<?php

namespace SilverStripe\UserForms\FormField;

use SilverStripe\Forms\FieldList;
use SilverStripe\UserForms\Model\EditableFormField;

/**
 * A list of formfields which allows for iterative processing of nested composite fields
 */
class UserFormsFieldList extends FieldList implements UserFormsFieldContainer
{
    public function processNext(EditableFormField $field)
    {
        $formField = $field->getFormField();
        if (!$formField) {
            return $this;
        }

        $this->push($formField);

        if ($formField instanceof UserFormsFieldContainer) {
            return $formField->setParent($this);
        }

        return $this;
    }

    public function getParent()
    {
        // Field list does not have a parent
        return null;
    }

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

    /**
     * Remove all empty steps
     */
    public function clearEmptySteps()
    {
        foreach ($this as $field) {
            if ($field instanceof UserFormsStepField && count($field->getChildren() ?? []) === 0) {
                $this->remove($field);
            }
        }
    }
}