/home/silvwabw/public_html/wp-content/plugins/gutenverse-companion/includes/essential/class-api.php
<?php
/**
 * API
 *
 * @author Jegstudio
 * @since 1.0.0
 * @package gutenverse-companion
 */

namespace Gutenverse_Companion\Essential;

use WP_REST_Response;

/**
 * Class API
 *
 * @package gutenverse-companion
 */
class Api {
	/**
	 * Api constructor.
	 */
	public function __construct() {

		add_action( 'rest_api_init', array( $this, 'register_routes' ) );
	}

	/**
	 * Register Jeg Theme Essence APIs
	 */
	public function register_routes() {
		register_rest_route(
			'gutenverse-essence/v1',
			'/gutenverse-essence-proxy',
			array(
				'methods'             => 'POST',
				'callback'            => array( $this, 'essence_proxy' ),
				'permission_callback' => '__return_true',
			)
		);
	}
	/**
	 * Essence Proxy
	 */
	public function essence_proxy( $request ) {
		$url      = gutenverse_esc_data( $request->get_param( 'url' ) );
		$body     = gutenverse_esc_data( (array) $request->get_param( 'body' ), 'array' );
		$method   = gutenverse_esc_data( $request->get_param( 'method' ) );
		$response = wp_remote_request(
			$url,
			array(
				'method'  => strtoupper( $method ),
				'body'    => $body ? json_encode( $body ) : $body,
				'headers' => array(
					'Content-Type' => 'application/json',
				),
			)
		);

		if ( is_wp_error( $response ) ) {
			return new WP_REST_Response(
				array(
					'active' => false,
					'status' => 'failed',
				),
				400
			);
		}

		$external_api_body = wp_remote_retrieve_body( $response );
		return rest_ensure_response( json_decode( $external_api_body ) );
	}
}