<?php
/**
 * Flatsome Infinite scroll extension
 *
 * @author     UX Themes
 * @category   Extension
 * @package    Flatsome/Extensions
 * @since      3.5.0
 */

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

/**
 * Class Flatsome_Infinite_Scroll
 */
class Flatsome_Infinite_Scroll {

	/**
	 * Version number
	 *
	 * @var string
	 */
	private $version;

	/**
	 * Holds loader type selected from theme settings.
	 * ex. button, spinner, image, etc.
	 *
	 * @var string
	 */
	private $loader_type;

	/**
	 * Holds category list style from theme settings.
	 * ex. grid, list, masonry
	 *
	 * @var string
	 */
	private $list_style;

	/**
	 * Static instance
	 *
	 * @var object
	 */
	private static $instance;

	/**
	 * Flatsome_Infinite_Scroll constructor.
	 */
	private function __construct() {
		$theme         = wp_get_theme( get_template() );
		$this->version = $theme->get( 'Version' );

		add_action( 'wp', array( $this, 'init' ) );
	}

	/**
	 * Initializes the extension object and returns its instance
	 *
	 * @return object The extension object instance
	 */
	public static function get_instance() {
		if ( ! isset( self::$instance ) ) {
			self::$instance = new self();
		}

		return self::$instance;
	}

	/**
	 * Initialize extension
	 */
	public function init() {
		if ( is_admin() || ! flatsome_is_shop_archive() ) {
			return;
		}

		$this->loader_type = get_theme_mod( 'infinite_scroll_loader_type', 'spinner' );
		$this->list_style  = get_theme_mod( 'category_grid_style', 'grid' );

		add_action( 'wp_enqueue_scripts', array( $this, 'add_scripts' ), 99 );
		add_action( 'woocommerce_after_shop_loop', array( $this, 'add_page_loader' ), 20 );
		add_action( 'wp_head', array( $this, 'add_css' ), 110 );
	}

	/**
	 * Add extension scripts
	 */
	public function add_scripts() {
		global $extensions_uri;
		wp_enqueue_script( 'flatsome-infinite-scroll-js', get_template_directory_uri() . '/assets/libs/infinite-scroll.pkgd.min.js', array( 'jquery', 'flatsome-js' ), '4.0.1', true );
		wp_enqueue_script( 'flatsome-infinite-scroll', $extensions_uri . '/flatsome-infinite-scroll/flatsome-infinite-scroll.js', array( 'jquery', 'flatsome-js' ), $this->version, true );

		$params = array(
			'scroll_threshold' => 400,
			'fade_in_duration' => 300,
			'type'             => $this->loader_type,
			'list_style'       => $this->list_style,
			'history'          => 'push',
		);

		wp_localize_script( 'flatsome-infinite-scroll', 'flatsome_infinite_scroll', apply_filters( 'flatsome_infinite_scroll_params', $params ) );
	}

	/**
	 *  Adds page loader template
	 */
	public function add_page_loader() {
		$this->get_template( $this->loader_type );
	}

	/**
	 * Add extension CSS
	 */
	public function add_css() {
		ob_start();
		?>
		<style id="infinite-scroll-css" type="text/css">
			.page-load-status,
			.archive .woocommerce-pagination {
				display: none;
			}
		</style>
		<?php
		$css = ob_get_clean();
		echo flatsome_minify_css( $css ); // @codingStandardsIgnoreLine
	}

	/**
	 * Gets and includes loader template file specified by name.
	 *
	 * @param string $name Name of the template.
	 */
	private function get_template( $name ) {
		global $extensions_url;
		$template = $extensions_url . "/flatsome-infinite-scroll/templates/{$name}.php";
		include $template;
	}
}

/**
 * Init Flatsome_Infinite_Scroll
 */
Flatsome_Infinite_Scroll::get_instance();
