<?php

class AIOC_AllInOneCarouselForDivi extends DiviExtension {

	/**
	 * The gettext domain for the extension's translations.
	 *
	 * @since 1.0.0
	 *
	 * @var string
	 */
	public $gettext_domain = 'all-in-one-carousel-for-divi';

	/**
	 * The extension's WP Plugin name.
	 *
	 * @since 1.0.0
	 *
	 * @var string
	 */
	public $name = 'all-in-one-carousel-for-divi';

	/**
	 * The extension's version
	 *
	 * @since 1.0.0
	 *
	 * @var string
	 */
	public $version = ALL_IN_ONE_CAROUSEL_FOR_DIVI_VERSION;

	/**
	 * AIOC_AllInOneCarouselForDivi constructor.
	 *
	 * @param string $name
	 * @param array  $args
	 */
	public function __construct( $name = 'all-in-one-carousel-for-divi', $args = array() ) {
		$this->plugin_dir     = plugin_dir_path( __FILE__ );
		$this->plugin_dir_url = plugin_dir_url( $this->plugin_dir );
        $this->_frontend_js_data    = array(
            'ajaxurl'   => admin_url( 'admin-ajax.php' ),
            'ajaxnonce' => wp_create_nonce( 'elicus-divi-carousel-nonce' ),
        );
        $this->_builder_js_data     = array(
            'et_builder_accent_color' => esc_html( et_get_option( 'accent_color', '#7EBEC5' ) ),
            'site_url' => esc_url( site_url() ),
            'file' => et_is_builder_plugin_active() ? 'style-dbp' : 'style',
        );
		
		add_action( 'wp_enqueue_scripts', array( $this, 'aioc_register_scripts' ) );
		add_action( 'wp_enqueue_scripts', array( $this, 'aioc_fb_enqueue_scripts' ) );
		add_filter( 'et_late_global_assets_list', array( $this, 'aioc_late_assets' ), 10, 3 );
		
		parent::__construct( $name, $args );

		if ( is_admin() ) {
			require_once plugin_dir_path( __FILE__ ) . 'src/class-update.php';
		}
		
		require_once $this->plugin_dir . 'functions.php';

		add_action( 'wp_ajax_aioc_product_quick_view_content', array( $this, 'aioc_product_quick_view_content' ) );
        add_action( 'wp_ajax_nopriv_aioc_product_quick_view_content', array( $this, 'aioc_product_quick_view_content' ) );

	}

    public function aioc_register_scripts() {
		wp_register_script( 'elicus-images-loaded-script', "{$this->plugin_dir_url}includes/assets/js/imagesloaded.pkgd.min.js", array('jquery'), '4.1.4', true );
        wp_register_script( 'elicus-swiper-script', "{$this->plugin_dir_url}includes/assets/js/swiper.min.js", array('jquery'), '6.4.5', true );
		wp_register_style( 'elicus-swiper-style', "{$this->plugin_dir_url}includes/assets/css/swiper.min.css", array(), '6.4.5' );
        wp_register_style( 'aioc-swiper-style', "{$this->plugin_dir_url}styles/aiocSwiper.min.css", array(), '1.0.0' );
        wp_register_script( 'magnific-popup', "{$this->plugin_dir_url}includes/assets/js/magnific_popup.min.js", array('jquery'), '1.0.0', true );
        wp_register_style( 'magnific-popup', "{$this->plugin_dir_url}includes/assets/css/magnific_popup.min.css", array(), '1.0.0' );
    }

    public function aioc_fb_enqueue_scripts() {
        if ( et_core_is_fb_enabled() ) {
			wp_enqueue_script( 'elicus-images-loaded-script' );
            wp_enqueue_script( 'elicus-swiper-script' );
            wp_enqueue_style( 'elicus-swiper-style' );
        }
    }

	public function aioc_late_assets( $assets_list, $assets_args, $dynamic_assets ) {
		if ( function_exists( 'et_get_dynamic_assets_path' ) && function_exists( 'et_is_cpt' ) ) {
			$cpt_suffix = et_is_cpt() ? '_cpt' : '';
			$assets_list['et_legacy_animations'] = array(
				'css' => $assets_args['assets_prefix'] . "/css/legacy_animations{$cpt_suffix}.css",
			);
			$assets_list['et_icons_all'] = array(
				'css' => $assets_args['assets_prefix'] . "/css/icons_all.css",
			);
			$assets_list['et_overlay'] = array(
				'css' => $assets_args['assets_prefix'] . "/css/overlay{$cpt_suffix}.css",
			);
			$assets_list['et_icons_fa'] = array(
				'css' => $assets_args['assets_prefix'] . "/css/icons_fa_all.css",
			);
			$assets_list['animations'] = array(
				'css' => $assets_args['assets_prefix'] . "/css/animations{$cpt_suffix}.css",
			);
			$assets_list['et_icons_social'] = array(
				'css' => $assets_args['assets_prefix'] . "/css/icons_base_social.css",
			);
		}
		return $assets_list;
	}

    public function aioc_product_quick_view_content() {
		check_ajax_referer( 'elicus-aioc-products-carousel-nonce' );

		if ( empty( $_POST['pro_id'] ) ) {
			wp_die();
		}
		if ( post_password_required() ) {
			echo et_core_intentionally_unescaped( get_the_password_form(), 'html' ); // WPCS: XSS ok.
			return;
		}

		global $product, $post;
		
		$pro_id  = sanitize_text_field( wp_unslash( $_POST['pro_id'] ) );
		$product = wc_get_product( $pro_id );

		// Title will only display if posts is declated
		$post    = get_post( $pro_id ); // phpcs:ignore

		aioc_products_carousel_before_quick_view_popup_hooks();
		do_action( 'aioc_product_carousel_before_quick_view_popup', $product ); ?>

		<div class="aioc-product-quick-view woocommerce single-product">
			
			<?php
			do_action( 'aioc_product_carousel_before_quick_view_product', $product ); ?>

			<div id="product-<?php echo esc_attr( $pro_id ); ?>" <?php wc_product_class( '', $product ); ?>>
				<?php
				/**
				 * Hook: woocommerce_before_single_product_summary.
				 *
				 * @hooked woocommerce_show_product_sale_flash - 10
				 * @hooked woocommerce_show_product_images - 20
				 */
				do_action( 'woocommerce_before_single_product_summary' ); ?>

				<div class="summary entry-summary">
					<?php
					/**
					 * Hook: woocommerce_single_product_summary.
					 *
					 * @hooked woocommerce_template_single_title - 5
					 * @hooked woocommerce_template_single_rating - 10
					 * @hooked woocommerce_template_single_price - 10
					 * @hooked woocommerce_template_single_excerpt - 20
					 * @hooked woocommerce_template_single_add_to_cart - 30
					 * @hooked woocommerce_template_single_meta - 40
					 * @hooked woocommerce_template_single_sharing - 50
					 * @hooked WC_Structured_Data::generate_product_data() - 60
					 */
					do_action( 'woocommerce_single_product_summary' ); ?>
				</div>
			</div>
			<?php do_action( 'aioc_product_carousel_after_quick_view_product', $product ); ?>
		</div>

		<?php
		do_action( 'aioc_product_carousel_after_quick_view_popup', $product );
		aioc_products_carousel_after_quick_view_popup_hooks();

		// Rest global post variable
		wp_reset_postdata();

		wp_die();
	}
	
}

new AIOC_AllInOneCarouselForDivi;
