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

abstract class NF_Abstracts_Controller
{
    /**
     * Data (Misc.) passed back to the client in the Response.
     *
     * @var array
     */
    protected $_data = array();

    /**
     * Errors passed back to the client in the Response.
     *
     * @var array
     */
    protected $_errors = array();

    /**
     * Debug Messages passed back to the client in the Response.
     *
     * @var array
     */
    protected $_debug = array();

    /*
     * PUBLIC METHODS
     */

    /**
     * NF_Abstracts_Controller constructor.
     */
    public function __construct()
    {
        //This section intentionally left blank.
    }


    /*
     * PROTECTED METHODS
     */

    /**
     * Respond
     *
     * A wrapper for the WordPress AJAX response pattern.
     */
    protected function _respond( $data = array() )
    {
        if( empty( $data ) ){
            $data = $this->_data;
        }

        if( isset( $this->_data['debug'] ) ) {
            $this->_debug = array_merge( $this->_debug, $this->_data[ 'debug' ] );
        }

        if( isset( $this->_data['errors'] ) && $this->_data[ 'errors' ] ) {
            $this->_errors = array_merge( $this->_errors, $this->_data[ 'errors' ] );
        }

        // allow for accessing and acting on $data before responding
        do_action( 'ninja_forms_before_response', $data );

        $response = array( 'data' => $data, 'errors' => $this->_errors, 'debug' => $this->_debug );

        echo wp_json_encode( $response );

        wp_die(); // this is required to terminate immediately and return a proper response
    }
}