<?php

namespace SilverStripe\Control\Tests\RequestHandlingTest;

use SilverStripe\Control\Controller;
use SilverStripe\Dev\TestOnly;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\FormAction;
use SilverStripe\Forms\TextField;
use SilverStripe\View\SSViewer;

class FormActionController extends Controller implements TestOnly
{
    protected $template = 'BlankPage';

    private static $url_segment = 'FormActionController';

    private static $allowed_actions = [
        'controlleraction',
        'Form',
        'formactionInAllowedActions'
        //'formaction', // left out, implicitly allowed through form action
    ];

    public function controlleraction($request)
    {
        return 'controlleraction';
    }

    public function disallowedcontrollermethod()
    {
        return 'disallowedcontrollermethod';
    }

    public function Form()
    {
        return new Form(
            $this,
            "Form",
            new FieldList(
                new TextField("MyField")
            ),
            new FieldList(
                new FormAction("formaction"),
                new FormAction('formactionInAllowedActions')
            )
        );
    }

    /**
     * @param array $data
     * @param Form  $form Made optional to simulate error behaviour in "live" environment (missing arguments don't throw a fatal error there)
     *  (missing arguments don't throw a fatal error there)
     * @return string
     */
    public function formaction($data, $form = null)
    {
        return 'formaction';
    }

    public function formactionInAllowedActions($data, $form = null)
    {
        return 'formactionInAllowedActions';
    }

    public function getViewer($action = null)
    {
        return new SSViewer('BlankPage');
    }
}