<?php

class StoreX_Customizer_Notify {

	private $recommended_actions;

	
	private $recommended_plugins;

	
	private static $instance;

	
	private $recommended_actions_title;

	
	private $recommended_plugins_title;

	
	private $dismiss_button;

	
	private $storex_install_button_label;

	
	private $storex_activate_button_label;

	private $config;

	private $storex_deactivate_button_label;

	
	public static function init( $config ) {
		if ( ! isset( self::$instance ) && ! ( self::$instance instanceof StoreX_Customizer_Notify ) ) {
			self::$instance = new StoreX_Customizer_Notify;
			if ( ! empty( $config ) && is_array( $config ) ) {
				self::$instance->config = $config;
				self::$instance->setup_config();
				self::$instance->setup_actions();
			}
		}
	}

	public function setup_config() {

		global $storex_customizer_notify_recommended_plugins;
		global $storex_customizer_notify_recommended_actions;

		global $storex_install_button_label;
		global $storex_activate_button_label;
		global $storex_deactivate_button_label;

		$this->recommended_actions = isset( $this->config['recommended_actions'] ) ? $this->config['recommended_actions'] : array();
		$this->recommended_plugins = isset( $this->config['recommended_plugins'] ) ? $this->config['recommended_plugins'] : array();

		$this->recommended_actions_title = isset( $this->config['recommended_actions_title'] ) ? $this->config['recommended_actions_title'] : '';
		$this->recommended_plugins_title = isset( $this->config['recommended_plugins_title'] ) ? $this->config['recommended_plugins_title'] : '';
		$this->dismiss_button            = isset( $this->config['dismiss_button'] ) ? $this->config['dismiss_button'] : '';

		$storex_customizer_notify_recommended_plugins = array();
		$storex_customizer_notify_recommended_actions = array();

		if ( isset( $this->recommended_plugins ) ) {
			$storex_customizer_notify_recommended_plugins = $this->recommended_plugins;
		}

		if ( isset( $this->recommended_actions ) ) {
			$storex_customizer_notify_recommended_actions = $this->recommended_actions;
		}

		$storex_install_button_label    = isset( $this->config['install_button_label'] ) ? $this->config['install_button_label'] : '';
		$storex_activate_button_label   = isset( $this->config['activate_button_label'] ) ? $this->config['activate_button_label'] : '';
		$storex_deactivate_button_label = isset( $this->config['storex_deactivate_button_label'] ) ? $this->config['storex_deactivate_button_label'] : '';
	}

	public function setup_actions() {

		// Register the section
		add_action( 'customize_register', array( $this, 'storex_plugin_notification_customize_register' ) );

		// Enqueue scripts and styles
		add_action( 'customize_controls_enqueue_scripts', array( $this, 'storex_customizer_notify_scripts_for_customizer' ), 0 );

		/* ajax callback for dismissable recommended actions */
		add_action( 'wp_ajax_quality_customizer_notify_dismiss_action', array( $this, 'storex_customizer_notify_dismiss_recommended_action_callback' ) );

		add_action( 'wp_ajax_ti_customizer_notify_dismiss_recommended_plugins', array( $this, 'storex_customizer_notify_dismiss_recommended_plugins_callback' ) );

	}

	
	public function storex_customizer_notify_scripts_for_customizer() {

		wp_enqueue_style( 'storex-customizer-notify-css', STOREX_PARENT_INC_URI . '/customizer/customizer-notify/css/storex-customizer-notify.css', array());

		wp_enqueue_style( 'storex-plugin-install' );
		wp_enqueue_script( 'storex-plugin-install' );
		wp_add_inline_script( 'storex-plugin-install', 'var pagenow = "customizer";' );

		wp_enqueue_script( 'storex-updates' );

		wp_enqueue_script( 'storex-customizer-notify-js', STOREX_PARENT_INC_URI . '/customizer/customizer-notify/js/storex-notify.js', array( 'customize-controls' ));
		wp_localize_script(
			'storex-customizer-notify-js', 'StoreXCustomizercompanionObject', array(
				'storex_ajaxurl'            => esc_url(admin_url( 'admin-ajax.php' )),
				'storex_template_directory' => esc_url(get_template_directory_uri()),
				'storex_base_path'          => esc_url(admin_url()),
				'storex_activating_string'  => __( 'Activating', 'storex' ),
				'dismiss_action_nonce'      => wp_create_nonce( 'storex_dismiss_action' ),
				'dismiss_plugins_nonce'     => wp_create_nonce( 'storex_dismiss_plugins' ),
			)
		);

	}
	
	public function storex_plugin_notification_customize_register( $wp_customize ) {
		
		require STOREX_PARENT_INC_DIR . '/customizer/customizer-notify/storex-notify-section.php';

		$wp_customize->register_section_type( 'StoreX_Customizer_Notify_Section' );

		$wp_customize->add_section(
			new StoreX_Customizer_Notify_Section(
				$wp_customize,
				'StoreX-customizer-notify-section',
				array(
					'title'          => $this->recommended_actions_title,
					'plugin_text'    => $this->recommended_plugins_title,
					'dismiss_button' => $this->dismiss_button,
					'priority'       => 0,
				)
			)
		);

	}

	public function storex_customizer_notify_dismiss_recommended_action_callback() {

		global $storex_customizer_notify_recommended_actions;

		// Verify nonce and ensure the current user can manage theme options.
		if ( ! isset( $_GET['nonce'] ) || ! check_ajax_referer( 'storex_dismiss_action', 'nonce', false ) ) {
			wp_die();
		}

		if ( ! current_user_can( 'edit_theme_options' ) ) {
			wp_die();
		}

		$action_id = ( isset( $_GET['id'] ) ) ? sanitize_text_field( wp_unslash( $_GET['id'] ) ) : '';

		echo esc_html( $action_id );

		if ( ! empty( $action_id ) ) {

			if ( get_theme_mod( 'storex_customizer_notify_show' ) ) {

				$storex_customizer_notify_show_recommended_actions = get_theme_mod( 'storex_customizer_notify_show' );

				$todo = isset( $_GET['todo'] ) ? sanitize_key( wp_unslash( $_GET['todo'] ) ) : '';

				switch ( $todo ) {
					case 'add':
						$storex_customizer_notify_show_recommended_actions[ $action_id ] = true;
						break;
					case 'dismiss':
						$storex_customizer_notify_show_recommended_actions[ $action_id ] = false;
						break;
				}
				echo esc_html( $storex_customizer_notify_show_recommended_actions );

			} else {
				$storex_customizer_notify_show_recommended_actions = array();
				if ( ! empty( $storex_customizer_notify_recommended_actions ) ) {
					foreach ( $storex_customizer_notify_recommended_actions as $storex_lite_customizer_notify_recommended_action ) {
						if ( $storex_lite_customizer_notify_recommended_action['id'] == $action_id ) {
							$storex_customizer_notify_show_recommended_actions[ $storex_lite_customizer_notify_recommended_action['id'] ] = false;
						} else {
							$storex_customizer_notify_show_recommended_actions[ $storex_lite_customizer_notify_recommended_action['id'] ] = true;
						}
					}
					echo esc_html( $storex_customizer_notify_show_recommended_actions );
				}
			}
		}
		wp_die();
	}
	
	public function storex_customizer_notify_dismiss_recommended_plugins_callback() {

		// Verify nonce and ensure the current user can manage theme options.
		if ( ! isset( $_GET['nonce'] ) || ! check_ajax_referer( 'storex_dismiss_plugins', 'nonce', false ) ) {
			wp_die();
		}

		if ( ! current_user_can( 'edit_theme_options' ) ) {
			wp_die();
		}

		$action_id = ( isset( $_GET['id'] ) ) ? sanitize_text_field( wp_unslash( $_GET['id'] ) ) : '';

		echo esc_html( $action_id );

		if ( ! empty( $action_id ) ) {

			$storex_lite_customizer_notify_show_recommended_plugins = get_theme_mod( 'storex_customizer_notify_show_recommended_plugins' );

			$todo = isset( $_GET['todo'] ) ? sanitize_key( wp_unslash( $_GET['todo'] ) ) : '';

			switch ( $todo ) {
				case 'add':
					$storex_lite_customizer_notify_show_recommended_plugins[ $action_id ] = false;
					break;
				case 'dismiss':
					$storex_lite_customizer_notify_show_recommended_plugins[ $action_id ] = true;
					break;
			}
			echo esc_html( $storex_lite_customizer_notify_show_recommended_plugins );
		}
		wp_die();
	}
}