<?php

namespace SilverStripe\SpamProtection;

use SilverStripe\Forms\FormField;

/**
 * SpamProtector base interface.
 *
 * All Protectors are required implement this interface if they want to appear
 * on the form.
 *
 * Classes with this interface are used to generate helper lists to allow the
 * user to select the protector.
 *
 * @package spamprotection
 */

interface SpamProtector
{
    /**
     * Return the {@link FormField} associated with this protector.
     *
     * Most spam methods will simply return a piece of HTML to be injected at
     * the end of the form. If a spam method needs to inject more than one
     * form field (i.e a hidden field and a text field) then return a
     * {@link FieldGroup} from this method to include both.
     *
     * @param string $name
     * @param string $title
     * @param mixed $value
     * @return FormField The resulting field
     */
    public function getFormField($name = null, $title = null, $value = null);

    /**
     * Set the fields to map spam protection too
     *
     * @param array $fieldMapping array of Field Names, where the indexes of the array are
     * the field names of the form and the values are the standard spamprotection
     * fields used by the protector
     */
    public function setFieldMapping($fieldMapping);
}