<?php
defined( 'ZEROBSCRM_PATH' ) || exit( 0 );

/**
 *
 * The JPCRM_FeatureSniffer class lets core detect installed
 * plugins for which we already have integrations
 */
class JPCRM_FeatureSniffer {

	/**
	 * An array of plugins installed.
	 *
	 * @var array
	 */
	public $all_plugins = array();

	/**
	 * An array of alerts to display to user.
	 *
	 * @var array
	 */
	public $alerts = array();

	public function __construct() {
		if ( ! function_exists( 'get_plugins' ) ) {
			require_once ABSPATH . 'wp-admin/includes/plugin.php';
		}
		$this->all_plugins = get_plugins();
	}

	/**
	 *
	 * Checks if there is an unused CRM integration
	 * with installed plugins
	 *
	 * $args may look something like this:
	 *  array(
	 *    'feature_slug'    => 'feature_slug',
	 *    'plugin_slug'     => 'plugin.php',
	 *    'more_info_link'  => 'https://kb.jetpackcrm.com/some_link_to_docs'
	 *  )
	 *
	 * @param array $args params passed to check, e.g.
	 * @param bool  $is_silent determine whether to show notices to the end user or not.
	 *
	 * @return bool
	 */
	public function sniff_for_plugin( $args = array(), $is_silent = false ) {

		if (
			// bad params
			empty( $args )
			|| ! isset( $args['feature_slug'] )
			|| ! isset( $args['plugin_slug'] )
			|| ! isset( $args['more_info_link'] )
			// target plugin isn't active
			|| ! is_plugin_active( $args['plugin_slug'] )
			// feature is already enabled
			|| zeroBSCRM_isExtensionInstalled( $args['feature_slug'] )
		) {
			return false;
		}

		$is_dismissed = get_option( 'jpcrm_hide_' . $args['feature_slug'] . '_feature_alert', false );

		// handle messaging if not silent
		if ( ! $is_silent && ! $is_dismissed && current_user_can( 'activate_plugins' ) ) {
			$plugin_details = $this->all_plugins[ $args['plugin_slug'] ];

			global $zbs;

			$message_template = sprintf( __( 'Jetpack CRM has an optional integration with your <code>%s</code> plugin, but the feature is not currently enabled.' ), $plugin_details['Name'] );
			if ( isset( $args['is_module'] ) && $args['is_module'] ) {
				$message_template .= ' ' . sprintf( __( 'If you want to use this feature, please activate it in <a href="%s">Core Modules</a>.' ), zeroBSCRM_getAdminURL( $zbs->slugs['modules'] ) );
			}

			##WLREMOVE
			$message_template .= '<br><br>' . sprintf( __( 'Learn more by going <a href="%s" target="_blank">here</a>.' ), $args['more_info_link'] );
			##/WLREMOVE

			$this->alerts[] = array(
				'feature_slug' => $args['feature_slug'],
				'message'      => $message_template,
			);
		}

		return true;
	}

	/**
	 *
	 * Show alert if there is a feature one might find useful
	 *
	 * Note that this will only show the first unused feature detected
	 * that has not been dismissed
	 */
	public function show_feature_alerts() {
		// no untapped features, so no messaging needed
		if ( count( $this->alerts ) == 0 ) {
			return false;
		}
		if ( zeroBSCRM_isAdminPage() ) {

			$feature_alert_fn = function () {
				// only show first message; no need to overload user
				?>
			<div id="<?php echo $this->alerts[0]['feature_slug']; ?>_feature_alert"
				class="ui segment jpcrm-promo notice jpcrm_feature_alert is-dismissible">
				<div class="content">
					<p><strong><?php echo $this->alerts[0]['message']; ?></strong></p>
				</div>
			</div>
				<?php
			};
			add_action( 'admin_notices', $feature_alert_fn );
		}
	}

	/**
	 * Sets alert to be dismissed
	 * (Effectively backend variant of `jpcrm_hide_feature_alert()`)
	 */
	public function dismiss_alert( $feature_slug ) {

		if ( ! empty( $feature_slug ) ) {

			update_option( 'jpcrm_hide_' . $feature_slug . '_feature_alert', 1, false );
			return true;

		}

		return false;
	}
}

