<?php
/**
 * Elementor widgets
 *
 * @package Holiday_Cottage
 */

namespace HolidayCottageElementorAddons;

/**
 * Class Plugin
 *
 * Main Plugin class
 *
 * @since 1.0.0
 */
class Plugin {

	/**
	 * Instance
	 *
	 * @since 1.0.0
	 * @access private
	 * @static
	 *
	 * @var Plugin The single instance of the class.
	 */
	private static $_instance = null;

	/**
	 * Instance.
	 *
	 * Ensures only one instance of the class is loaded or can be loaded.
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @return Plugin An instance of the class.
	 */
	public static function instance() {
		if ( is_null( self::$_instance ) ) {
			self::$_instance = new self();
		}
		return self::$_instance;
	}

	/**
	 * Load widget scripts.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function widget_scripts() {
	}

	/**
	 * Include widgets files.
	 *
	 * @since 1.0.0
	 * @access private
	 */
	private function include_widgets_files() {
		require_once trailingslashit( get_template_directory() ) . 'inc/widgets/posts-grid.php';
		require_once trailingslashit( get_template_directory() ) . 'inc/widgets/rooms-grid.php';
	}

	/**
	 * Register widgets.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function register_widgets() {
		// Its is now safe to include Widgets files.
		$this->include_widgets_files();

		// Register Widgets.
		\Elementor\Plugin::instance()->widgets_manager->register_widget_type( new Widgets\Posts_Grid() );
		\Elementor\Plugin::instance()->widgets_manager->register_widget_type( new Widgets\Rooms_Grid() );
	}

	/**
	 * Class constructor.
	 *
	 * Register plugin action hooks and filters.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function __construct() {

		// Register widget scripts.
		add_action( 'elementor/frontend/after_register_scripts', [ $this, 'widget_scripts' ] );

		// Register widgets.
		add_action( 'elementor/widgets/widgets_registered', [ $this, 'register_widgets' ] );
	}
}

// Instantiate Plugin Class.
Plugin::instance();
