<?php if ( ! defined( 'ABSPATH' ) ) exit;

/**
 * Class NF_Abstracts_FieldOptIn
 *
 * Opt-In fields should extend this class.
 *
 * Supports:
 * - Checkbox value processing
 *
 * Planned Support:
 * - Single / Multiple Type Opt-In
 */
abstract class NF_Abstracts_FieldOptIn extends NF_Abstracts_Input
{
    protected $_name = 'optin';

    protected $_section = 'misc';

    protected $_parent_type = 'checkbox';

    protected $_templates = 'optin';

    protected $_settings = array( 'type', 'fieldset', 'checkbox_default_value' );

    protected $_settings_exclude = array( 'default', 'required', 'placeholder', 'input_limit_set', 'disable_input' );

    protected $_lists = array();

    public function __construct()
    {
        parent::__construct();

        /*
         * Setup 'type' options for the opt-in field.
         */
        $this->_settings[ 'type' ][ 'options' ] = array(
            array(
                'label'     => esc_html__( 'Single', 'ninja-forms' ),
                'value'     => 'single',
            ),
            array(
                'label'     => esc_html__( 'Multiple', 'ninja-forms' ),
                'value'     => 'multiple',
            ),
        );

        /*
         * Add a refresh extra for the groups fieldset.
         */
        $this->_settings[ 'fieldset' ][ 'label' ] = esc_html__( 'Lists', 'ninja-forms' ) . ' <a href="#"><small>' . esc_html__( 'refresh', 'ninja-forms' ) . '</small></a>';
        $this->_settings[ 'fieldset' ][ 'deps' ] = array( 'type' => 'multiple' );

        /*
         * Hide the 'type' and 'fieldset' ('groups') settings until they are ready for use.
         */
        $this->_settings[ 'type' ][ 'group' ] = '';
        $this->_settings[ 'fieldset' ][ 'group' ] = '';
    }

    protected function addList( $name, $label )
    {
        $this->_settings[ 'fieldset' ][ 'settings' ][] = array(
            'name' => $name,
            'type' => 'toggle',
            'label' => $label,
            'width' => 'full',
            'value' => ''
        );
    }

    protected function addLists( array $lists = array() )
    {
        if( empty( $lists ) ) return;

        foreach( $lists as $name => $label ){
            $this->addList( $name, $label );
        }
    }

    public function get_parent_type(){
        return $this->_parent_type;
    }

}