<?php

use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\LiteralField;
use SilverStripe\Control\Session;
use SilverStripe\Control\Director;
use SilverStripe\Control\HTTPResponse;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\TextField;
class TestMultiForm extends MultiForm
{
    public static $start_step = 'TestMultiFormStepOne';
    
    public function finish(array $data, Form $form): HTTPResponse
    {
        parent::finish($data, $form);
        
        $savedSteps = $this->getSavedSteps();
        
        $savedData = array();
        foreach ($savedSteps as $step) {
            $savedData = array_merge($savedData, $step->loadData());
        }
        
        $fields = new FieldList();
        $fields->push(new LiteralField("Heading", "<h3>You have submitted the following information:</h3>"));
        
        foreach ($savedData as $key=>$value) {
            $fields->push(new LiteralField($key . '_copy', "<p><strong>$key</strong> $value</p>"));
        }
        
        Session::set("MultiFormMessage", "Your information has been submitted.");
        
        return $this->Controller()->redirect(Director::BaseURL() . $this->Controller()->URLSegment);
    }
}

class TestMultiFormStepOne extends MultiFormStep
{
    public static $next_steps = 'TestMultiFormStepTwo';
    
    public function getFields()
    {
        return new FieldList(
            new TextField('FirstName', 'First name'),
            new TextField('Surname', 'Surname')
        );
    }
}

class TestMultiFormStepTwo extends MultiFormStep
{
    public static $next_steps = 'TestMultiFormStepThree';
    
    public function getFields()
    {
        return new FieldList(
            new TextField('Email', 'Email'),
            new TextField('Address', 'Address')
        );
    }
}


class TestMultiFormStepThree extends MultiFormStep
{
    public static $is_final_step = true;
    
    public function getFields()
    {
        $form = $this->getForm();
        $savedSteps = $form->getSavedSteps();
    
        $savedData = array();
        foreach ($savedSteps as $step) {
            $savedData = array_merge($savedData, $step->loadData());
        }
        
        $fields = new FieldList();
        $fields->push(new LiteralField("Heading", "<h3>You have submitted the following information:</h3>"));
        
        foreach ($savedData as $key=>$value) {
            if (preg_match("/_copy$/", $key ?? '')) {
                continue;
            }
            
            $fields->push(new LiteralField($key . '_copy', "<p><strong>$key</strong> $value</p>"));
        }
        
        return $fields;
    }
}