<?php

/**
 * Flo Guten Blocks Post Grid Block.
 */

if (!defined('ABSPATH')) {
	exit(); // Exit if accessed directly.
}

if (!class_exists('Flo_Guten_Blocks_Post_Grid_Block')) {
	/**
	 * Class Flo_Guten_Blocks_Post_Grid_Block.
	 */
	final class Flo_Guten_Blocks_Post_Grid_Block
	{
		/**
		 * Member Variable
		 *
		 * @var instance
		 */
		private static $instance;

		/**
		 *  Initiator
		 */
		public static function get_instance()
		{
			if (!isset(self::$instance)) {
				self::$instance = new self();
			}
			return self::$instance;
		}

		/**
		 * Constructor
		 */
		public function __construct()
		{
			add_action('init', [$this, 'register_block'], 100);
		}

		public function register_block()
		{
			register_block_type('flo-block/post-grid', [
				'attributes' => $this->get_attributes(),
				'render_callback' => [$this, 'render_callback'],
			]);
		}

		public function get_attributes()
		{
			return [
				'postType' => [
					'type' => 'string',
					'default' => 'post',
				],
				'taxonomyType' => [
					'type' => 'string',
					'default' => 'category',
				],
				'categories' => [
					'type' => 'array',
				],
				'postsToShow' => [
					'type' => 'number',
					'default' => 4,
				],
				'layout' => [
					'type' => 'string',
					'default' => 'text-under',
				],
				'layoutMobile' => [
					'type' => 'string',
					'default' => 'text-under-mobile',
				],
				'textElementsColor' => [
					'type' => 'object',
					'default' => [
						'custom' => '',
						'theme' => 'scheme_1/text/default',
					],
				],
				'mobileTextElementsColor' => [
					'type' => 'object',
					'default' => [
						'custom' => '',
						'theme' => 'scheme_1/text/default',
					],
				],
				'columns' => [
					'type' => 'number',
					'default' => 2,
				],
				'gapBetweenItems' => [
					'type' => 'number',
					'default' => 40,
				],
				'mobileGapBetweenItems' => [
					'type' => 'number',
					'default' => 20,
				],
				'gapInsideOverlay' => [
					'type' => 'number',
					'default' => 0,
				],
				'masonry' => [
					'type' => 'boolean',
					'default' => TRUE,
				],
				'imageHeight' => [
					'type' => 'number',
					'default' => 350,
				],
				'mobileImageHeight' => [
					'type' => 'number',
					'default' => 250,
				],
				'displayTextOnHover' => [
					'type' => 'boolean',
					'default' => FALSE,
				],
				'displayImageOverlay' => [
					'type' => 'boolean',
					'default' => TRUE,
				],
				'overlayColor' => [
					'type' => 'object',
					'default' => [
						'custom' => '#000000',
						'theme' => 'scheme_1/text/accent',
					],
				],
				'overlayOpacity' => [
					'type' => 'number',
					'default' => 0.3,
				],

				'displayPostDate' => [
					'type' => 'boolean',
					'default' => TRUE,
				],
				'postDateTypography' => [
					'type' => 'object',
					'default' => Flo_Guten_Blocks_Helper::get_default_typography_attributes(
						'third_level/overline_2'
					),
				],
				'displayPostExcerpt' => [
					'type' => 'boolean',
					'default' => TRUE,
				],
				'displayPostTaxonomy' => [
					'type' => 'boolean',
					'default' => TRUE,
				],
				'postTaxonomyTypography' => [
					'type' => 'object',
					'default' => Flo_Guten_Blocks_Helper::get_default_typography_attributes(
						'third_level/overline_1'
					),
				],
				'postTitleTypography' => [
					'type' => 'object',
					'default' => Flo_Guten_Blocks_Helper::get_default_typography_attributes(
						'title_1/xsmall'
					),
				],
				'metaColor' => [
					'type' => 'object',
					'default' => [
						'custom' => '',
						'theme' => 'scheme_1/overline/default',
					],
				],
				'mobileMetaColor' => [
					'type' => 'object',
					'default' => [
						'custom' => '',
						'theme' => 'scheme_1/overline/default',
					],
				],
				'displayPostImage' => [
					'type' => 'boolean',
					'default' => TRUE,
				],
				'imgSize' => [
					'type' => 'string',
					'default' => 'large',
				],
				'topMargin' => [
					'type' => 'number',
					'default' => 0,
				],
				'bottomMargin' => [
					'type' => 'number',
					'default' => 0,
				],
				'mobileTopMargin' => [
					'type' => 'number',
					'default' => 0,
				],
				'mobileBottomMargin' => [
					'type' => 'number',
					'default' => 0,
				],
				'displayPagination' => [
					'type' => 'boolean',
					'default' => FALSE,
				],
				'paginationMarkup' => [
					'type' => 'string',
					'default' => '',
				],
				'paginationElementsColor' => [
					'type' => 'object',
					'default' => [
						'custom' => '',
						'theme' => 'scheme_1/text/default',
					],
				],
				'paginationBackgroundColor' => [
					'type' => 'object',
					'default' => [
						'custom' => '',
						'theme' => 'scheme_1/background/default',
					],
				],
				'paginationLineColor' => [
					'type' => 'object',
					'default' => [
						'custom' => '',
						'theme' => 'scheme_1/overline/default',
					],
				],
				'paginationDisplayNumbers' => [
					'type' => 'boolean',
					'default' => TRUE,
				],
				'paginationNumbersTypography' => [
					'type' => 'object',
					'default' => Flo_Guten_Blocks_Helper::get_default_typography_attributes(
						'third_level/caption'
					),
				],
				'previousLinkLabel' => [
					'type' => 'string',
					'default' => 'Prev Page',
				],
				'nextLinkLabel' => [
					'type' => 'string',
					'default' => 'Next Page',
				],
				'paginationArrowsTypography' => [
					'type' => 'object',
					'default' => Flo_Guten_Blocks_Helper::get_default_typography_attributes(
						'third_level/navigation'
					),
				],
				'preview' => [
					'type' => 'boolean',
					'default' => FALSE,
				],
				'anchor' => [
					'type' => 'string',
					'default' => '',
				],
				'className' => [
					'type' => 'string',
					'default' => '',
				],
				'titleTagName' => [
					'type' => 'string',
					'default' => 'h3',
				],
				'blockKey' => [
					'type' => 'string',
					'default' => '',
				],
			];
		}
		public function render_callback($attributes)
		{
			ob_start();
			include dirname(__FILE__) . '/views/html-post-grid.php';
			return ob_get_clean();
		}
	}

	Flo_Guten_Blocks_Post_Grid_Block::get_instance();
}
