<?php
/**
 * VideoPress Jwt_Token_Bridge
 *
 * @package automattic/jetpack-videopress
 */

namespace Automattic\Jetpack\VideoPress;

use Automattic\Jetpack\Assets;

/**
 * VideoPress Jwt_Token_Bridge class.
 */
class Jwt_Token_Bridge {

	/**
	 * The handle used to enqueue the script
	 *
	 * @var string
	 */
	const SCRIPT_HANDLE = 'media-video-jwt-bridge';

	/**
	 * Initializer
	 *
	 * This method should be called only once by the Initializer class. Do not call this method again.
	 */
	public static function init() {

		if ( ! Status::is_active() ) {
			return;
		}

		// Expose the VideoPress token to the Block Editor context, including the front-end editor.
		add_action( 'enqueue_block_assets', array( __CLASS__, 'enqueue_jwt_token_bridge' ), 1 );
		add_action( 'enqueue_block_editor_assets', array( __CLASS__, 'enqueue_jwt_token_bridge' ), 1 );

		// Expose the VideoPress token to the WPAdmin context.
		add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue_jwt_token_bridge' ), 1 );
	}

	/**
	 * Gets the bridge script URL depending on the environment we are in
	 *
	 * @return string
	 */
	public static function get_bridge_url() {
		// TODO: use minified version in production.
		return Assets::get_file_url_for_environment(
			'../build/lib/videopress-token-bridge.js', // <- production
			'client/lib/videopress-token-bridge.js', // <- development
			__FILE__
		);
	}

	/**
	 * Enqueues the jwt bridge script.
	 */
	public static function enqueue_jwt_token_bridge() {
		global $post;
		$post_id = isset( $post->ID ) ? absint( $post->ID ) : 0;

		$bridge_url = self::get_bridge_url();

		self::enqueue_script();

		wp_localize_script(
			self::SCRIPT_HANDLE,
			'videopressAjax',
			array(
				'ajaxUrl'   => admin_url( 'admin-ajax.php' ),
				'bridgeUrl' => $bridge_url,
				'post_id'   => $post_id,
			)
		);
	}

	/**
	 * Enqueues only the JS script
	 *
	 * @param string $handle The script handle to identify the script.
	 * @return bool True if the script was successfully localized, false otherwise.
	 */
	public static function enqueue_script( $handle = self::SCRIPT_HANDLE ) {
		return wp_enqueue_script(
			$handle,
			self::get_bridge_url(),
			array(),
			Package_Version::PACKAGE_VERSION,
			false
		);
	}
}
