<?php

namespace sgpb;

defined( 'ABSPATH' ) || exit;


class SGPBReports
{
	private $type     = 'debug';
	private $reports  = array();

	public function __construct()
	{
		$this->init();
	}

	public function init()
	{
		$debugModeEnabled = AdminHelper::getOption('sgpb-enable-debug-mode');
		if ($debugModeEnabled == 1) {
			add_action('sgpbDebugReportUpdate', array($this, 'updateReport'), 10, 3);
			$this->render();
		}
	}

	public function updateReport($key = '', $value = '', $popupId = 0)
	{
		global $SGPB_DEBUG_POPUP_BUILDER_DETAILS;
		$value = $this->filterOptions($key, $value);
		$SGPB_DEBUG_POPUP_BUILDER_DETAILS[$popupId][$key] = $value;
		$this->updateCookiesReportForCurrentPopup($popupId);
	}

	public function render()
	{
		add_action('wp_footer', array($this, 'renderReportData'));
	}

	public function renderReportData()
	{
		global $wp_version;
		global $SGPB_DEBUG_POPUP_BUILDER_DETAILS;
		ScriptsIncluder::registerScript('DebugReport.js', array(
				'dirUrl' => SG_POPUP_JS_URL,
				'dep' => array('jquery'),
				'ver' => SGPB_POPUP_VERSION,
				'inFooter' => true
			)
		);
		ScriptsIncluder::enqueueScript('DebugReport.js');
		if (version_compare($wp_version, '4.5', '>')){
			/* after wp 4.5 version */
			ScriptsIncluder::addInlineScripts('DebugReport.js', 'var SGPB_DEBUG_POPUP_BUILDER_DETAILS = ' .wp_json_encode($SGPB_DEBUG_POPUP_BUILDER_DETAILS).';');
		} else {
			/* since wp 4.5 version */
			ScriptsIncluder::localizeScript('DebugReport.js', 'SGPB_DEBUG_POPUP_BUILDER_DETAILS', $SGPB_DEBUG_POPUP_BUILDER_DETAILS);
		}
	}

	public function filterOptions($key, $options)
	{
		$result = array();
		if (empty($options)) {
			return $result;
		}

		$optionsShouldBeConverted = array(
			'options',
			'events',
			'conditions',
			'targets'
		);

		if (!in_array($key, $optionsShouldBeConverted)) {
			return $options;
		}
		foreach ($options as $optionKey => $optionValue) {
			// when $key is 'events' or 'conditions'
			if (!is_array($optionValue) && $key != 'options') {
				$result[$optionKey]['name'] = $optionValue;
			}
			if (isset($optionValue['param'])) {
				$result[$optionKey]['name'] = $optionValue['param'];
			}
			if (isset($optionValue['value'])) {
				$result[$optionKey]['value'] = $optionValue['value'];
			}
			if (isset($optionValue['operator'])) {
				if ($optionValue['operator'] == '==') {
					$optionValue['operator'] = 'is';
				}
				else if ($optionValue['operator'] == '!=') {
					$optionValue['operator'] == 'is not';
				}
				$result[$optionKey]['operator'] = $optionValue['operator'];
			}

			if ($key == 'options') {
				// popup limitation
				if ($optionKey == 'sgpb-show-popup-same-user') {
					$result[]['popupLimitationCount'] = $options['sgpb-show-popup-same-user-count'];
					$result[]['popupLimitatioExpiry'] = $options['sgpb-show-popup-same-user-expiry'];
					if (isset($options['sgpb-show-popup-same-user-page-level'])) {
						$result[]['pageLevelCookie'] = $options['sgpb-show-popup-same-user-page-level'];
					}
				}
			}
		}

		return $result;
	}

	public function updateCookiesReportForCurrentPopup($popupId = 0)
	{
		global $SGPB_DEBUG_POPUP_BUILDER_DETAILS;
		// Do not processing the whole input	
		$essentialsgpbCookies = [
			'SGPBSubmissionReloadPopup',
			'SGPBShowingLimitationHomePage' . $popupId,
			'SGPBShowingLimitationPage' . $popupId,
			'SGPBShowingLimitationDomain' . $popupId,
			'sgDontShowPopup' . $popupId,
			'SGPBSubscription' . $popupId,
			$popupId
		];

		foreach ($essentialsgpbCookies as $essentialcookieName) {
			if (isset($_COOKIE[$essentialcookieName])) {
				$cookieValue = sanitize_text_field(  wp_unslash( $_COOKIE[$essentialcookieName] ) );	
				if( !empty( $cookieValue ) )
				{
					if (strpos($essentialcookieName, (string)$popupId) !== false) {
						if (isset($SGPB_DEBUG_POPUP_BUILDER_DETAILS[$popupId]['cookies'][0]['name']) &&
							$SGPB_DEBUG_POPUP_BUILDER_DETAILS[$popupId]['cookies'][0]['name'] == $essentialcookieName) {
							continue;
						}
						$SGPB_DEBUG_POPUP_BUILDER_DETAILS[$popupId]['cookies'][] = ['name' => $essentialcookieName, 'value' => 'exists'];
					}
				}				
			}
		}
	}

}
