<?php
/**
 * Gutenberg block.
 *
 * @package visual-portfolio
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Class Visual_Portfolio_Gutenberg_Saved_Block
 */
class Visual_Portfolio_Gutenberg_Saved_Block {
	/**
	 * Registered controls, that will be used in Gutenberg block.
	 *
	 * @var array
	 */
	public $registered_controls = array();

	/**
	 * Visual_Portfolio_Gutenberg_Saved_Block constructor.
	 */
	public function __construct() {
		add_action( 'init', array( $this, 'register_block' ), 11 );
		add_action( 'admin_init', array( $this, 'register_block_layouts_editor' ), 11 );
	}

	/**
	 * Register Block.
	 */
	public function register_block() {
		if ( ! function_exists( 'register_block_type_from_metadata' ) ) {
			return;
		}

		register_block_type_from_metadata(
			visual_portfolio()->plugin_path . 'gutenberg/block-saved',
			array(
				'render_callback' => array( $this, 'block_render' ),
			)
		);

		// Fallback.
		register_block_type_from_metadata(
			'nk/visual-portfolio',
			array(
				'render_callback' => array( $this, 'block_render' ),
				'attributes'      => array(
					'id' => array(
						'type' => 'string',
					),
					'align' => array(
						'type' => 'string',
					),
					'className' => array(
						'type' => 'string',
					),
					'anchor' => array(
						'type' => 'string',
					),
				),
			)
		);
	}

	/**
	 * Register Block for Layouts Editor.
	 */
	public function register_block_layouts_editor() {
		global $pagenow;

		if (
			'post.php' === $pagenow && isset( $_GET['post'] ) && 'vp_lists' === get_post_type( $_GET['post'] ) ||
			'post-new.php' === $pagenow && isset( $_GET['post_type'] ) && 'vp_lists' === $_GET['post_type']
		) {
			register_block_type_from_metadata(
				visual_portfolio()->plugin_path . 'gutenberg/layouts-editor/block'
			);
		}
	}

	/**
	 * Block output
	 *
	 * @param array $attributes - block attributes.
	 *
	 * @return string
	 */
	public function block_render( $attributes ) {
		$attributes = array_merge(
			array(
				'id'        => '',
				'align'     => '',
				'className' => '',
			),
			$attributes
		);

		if ( ! $attributes['id'] ) {
			return '';
		}

		// WPML support.
        // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
		$attributes['id'] = apply_filters( 'wpml_object_id', $attributes['id'], 'vp_lists', true );

		$class_name = 'wp-block-visual-portfolio';

		$wrapper_attributes = get_block_wrapper_attributes(
			array(
				'class' => $class_name,
			)
		);

		return sprintf( '<div %1$s>%2$s</div>', $wrapper_attributes, Visual_Portfolio_Get::get( array( 'id' => $attributes['id'] ) ) );
	}
}
new Visual_Portfolio_Gutenberg_Saved_Block();