<?php
/**
 * Wrapper class for registering and enqueueing scripts and styles.
 *
 * @link    https://wordpress.org/plugins/broken-link-checker/
 * @since   2.0.0
 *
 * @author  WPMUDEV (https://wpmudev.com)
 * @package WPMUDEV_BLC\Core\Traits
 *
 * @copyright (c) 2022, Incsub (http://incsub.com)
 */

namespace WPMUDEV_BLC\Core\Traits;

// Abort if called directly.
defined( 'WPINC' ) || die;

use WPMUDEV_BLC\Core\Loader as Core;

/**
 * Class Enqueue
 *
 * @package WPMUDEV_BLC\Core\Traits
 */
trait Enqueue {
	/**
	 * JS assets url.
	 *
	 * @since 2.0.0
	 *
	 * @var string JS assets url.
	 */
	public $scripts_dir = WPMUDEV_BLC_ASSETS_URL . 'dist/';

	/**
	 * CSS assets url.
	 *
	 * @since 2.0.0
	 *
	 * @var string CSS assets url.
	 */
	public $styles_dir = WPMUDEV_BLC_ASSETS_URL . 'css/';

	/**
	 * Set frontend scripts.
	 *
	 * @since 2.0.0
	 *
	 * @return array Set frontend scripts.
	 */
	public function set_front_scripts() {
		return array();
	}

	/**
	 * Set backend scripts.
	 *
	 * @since 2.0.0
	 *
	 * @return array Set backend scripts.
	 */
	public function set_admin_scripts() {
		return array();
	}

	/**
	 * Set frontend styles.
	 *
	 * @since 2.0.0
	 *
	 * @return array Set frontend styles.
	 */
	public function set_front_styles() {
		return array();
	}

	/**
	 * Set backend styles.
	 *
	 * @since 2.0.0
	 *
	 * @return array Set backend styles.
	 */
	public function set_admin_styles() {
		return array();
	}

	/**
	 * Prepares scripts.
	 *
	 * @since 2.0.0
	 *
	 * @return void Prepare scripts.
	 */
	public function prepare_scripts() {
		if ( \method_exists( $this, 'set_front_scripts' ) ) {
			$scripts = $this->set_front_scripts();

			if ( is_array( $scripts ) ) {
				Core::$scripts = array_merge( Core::$scripts, $scripts );
			}
		}

		if ( \method_exists( $this, 'set_admin_scripts' ) ) {
			$scripts = $this->set_admin_scripts();

			if ( is_array( $scripts ) ) {
				Core::$admin_scripts = array_merge( Core::$admin_scripts, $scripts );
			}
		}

		if ( \method_exists( $this, 'set_front_styles' ) ) {
			$scripts = $this->set_front_styles();

			if ( is_array( $scripts ) ) {
				Core::$styles = array_merge( Core::$styles, $scripts );
			}
		}

		if ( \method_exists( $this, 'set_admin_styles' ) ) {
			$scripts = $this->set_admin_styles();

			if ( is_array( $scripts ) ) {
				Core::$admin_styles = array_merge( Core::$admin_styles, $scripts );
			}
		}
	}

}
