<?php
/*100% match*/

defined( 'ABSPATH' ) or die( 'you do not have access to this page!' );

if ( ! class_exists( 'cmplz_review' ) ) {
	class cmplz_review {
		private static $_this;


		function __construct() {
			if ( isset( self::$_this ) ) {
				wp_die(
					sprintf(
						'%s is a singleton class and you cannot create a second instance.',
						get_class( $this )
					)
				);
			}

			self::$_this = $this;

			// uncomment for testing
			// update_option('cmplz_review_notice_shown', false, false);
			// update_option( 'cmplz_activation_time', strtotime( "-2 month" ), false );
			// show review notice, only to free users
			if ( ! defined( 'cmplz_premium' ) && ! is_multisite() ) {
				if ( ! get_option( 'cmplz_review_notice_shown' )
					&& get_option( 'cmplz_activation_time' )
					&& get_option( 'cmplz_activation_time' )
						< strtotime( '-1 month' )
				) {
					add_action( 'wp_ajax_cmplz_dismiss_review_notice', array( $this, 'dismiss_review_notice_callback' ) );
					add_action( 'admin_notices', array( $this, 'show_leave_review_notice' ) );
					add_action( 'admin_print_footer_scripts', array( $this, 'insert_dismiss_review' ) );
				}

				// set a time for users who didn't have it set yet.
				if ( ! get_option( 'cmplz_activation_time' ) ) {
					update_option( 'cmplz_activation_time', time(), false );
				}
			}

			add_action( 'admin_init', array( $this, 'process_get_review_dismiss' ) );
		}

		static function this() {
			return self::$_this;
		}

		public function show_leave_review_notice() {
			if ( isset( $_GET['cmplz_dismiss_review'] ) ) {
				return;
			}

			/**
			 * Prevent notice from being shown on Gutenberg page, as it strips off the class we need for the ajax callback.
			 * */
			$screen = get_current_screen();
			if ( $screen && $screen->parent_base === 'edit' ) {
				return;
			}
			?>
			<style>
				#message.cmplz-review {
					margin-left:10px !important;
				}
				.cmplz-review .button {
					margin-right:10px;
				}
				.cmplz-review .cmplz-buttons-row {
					padding:10px 0;
				}
				.cmplz-buttons-row a{
					padding-top:20px
				}
			</style>
			<div id="message"
				class="updated fade notice is-dismissible cmplz-review really-simple-plugins"
				style="border-left:4px solid #333">
				<div class="cmplz-container" style="display:flex">
					<div class="cmplz-review-image" style="padding:20px 10px"><img width=80px"
																				src="<?php echo CMPLZ_URL; ?>assets/images/icon-logo.svg"
																				alt="review-logo">
					</div>
					<div style="margin-left:30px">
						<p>
						<?php
						echo wp_kses_post(
							sprintf(
								__( 'Hi, you have been using Complianz | GDPR cookie consent for a month now, awesome! If you have a moment, please consider leaving a review on WordPress.org to spread the word. We greatly appreciate it! If you have any questions or feedback, leave us a %1$smessage%2$s.', 'complianz-gdpr' ),
								'<a href="https://complianz.io/contact" target="_blank">',
								'</a>'
							)
						);
						?>
								</p>
						<div class="cmplz-buttons-row">
							<a class="button button-primary" target="_blank" href="https://wordpress.org/support/plugin/complianz-gdpr/reviews/#new-post"><?php esc_html_e( __( 'Leave a review', 'complianz-gdpr' ) ); ?></a>

							<div class="dashicons dashicons-calendar"></div>
							<a href="#" id="maybe-later"><?php esc_html_e( 'Maybe later', 'complianz-gdpr' ); ?></a>

							<div class="dashicons dashicons-no-alt"></div>
							<a href="
							<?php
							echo add_query_arg(
								array(
									'page'                 => 'complianz',
									'cmplz_dismiss_review' => 1,
								),
								admin_url( 'admin.php' )
							);
							?>
										"><?php esc_html_e( 'Don\'t show again', 'complianz-gdpr' ); ?></a>
						</div>
					</div>
				</div>
			</div>
			<?php
		}

		/**
		 * Insert some ajax script to dismiss the review notice, and stop nagging about it
		 *
		 * @since  2.0
		 *
		 * @access public
		 *
		 * type: dismiss, later
		 */
		public function insert_dismiss_review() {
			$ajax_nonce = wp_create_nonce( 'cmplz_dismiss_review' );
			?>
			<script type='text/javascript'>
				jQuery(document).ready(function ($) {
					$(".cmplz-review.notice.is-dismissible").on("click", ".notice-dismiss", function (event) {
						rsssl_dismiss_review('dismiss');
					});
					$(".cmplz-review.notice.is-dismissible").on("click", "#maybe-later", function (event) {
						rsssl_dismiss_review('later');
						$(this).closest('.cmplz-review').remove();
					});
					$(".cmplz-review.notice.is-dismissible").on("click", ".review-dismiss", function (event) {
						rsssl_dismiss_review('dismiss');
						$(this).closest('.cmplz-review').remove();
					});

					function rsssl_dismiss_review(type) {
						var data = {
							'action': 'cmplz_dismiss_review_notice',
							'type': type,
							'token': '<?php echo $ajax_nonce; ?>'
						};
						$.post(ajaxurl, data, function (response) {});
					}
				});
			</script>
			<?php
		}

		/**
		 * Process the ajax dismissal of the review message.
		 *
		 * @since  2.1
		 *
		 * @access public
		 */
		public function dismiss_review_notice_callback() {
			$type = isset( $_POST['type'] ) ? $_POST['type'] : false;

			if ( $type === 'dismiss' ) {
				update_option( 'cmplz_review_notice_shown', true, false );
			}
			if ( $type === 'later' ) {
				// Reset activation timestamp, notice will show again in one month.
				update_option( 'cmplz_activation_time', time(), false );
			}

			wp_die(); // this is required to terminate immediately and return a proper response
		}

		/**
		 * Dismiss review notice with get, which is more stable
		 */
		public function process_get_review_dismiss() {
			if ( isset( $_GET['cmplz_dismiss_review'] ) ) {
				update_option( 'cmplz_review_notice_shown', true, false );
			}
		}
	}
}
