<?php
if ( ! defined( 'WPINC' ) ) {
	die;
}

/**
 * @since 1.0.0
 * Class Epsilon_Notifications
 */
class Epsilon_Notifications {
	/**
	 * @since 1.0.0
	 * @var null
	 */
	private static $instance = null;
	/**
	 * @since 1.0.0
	 * @var array
	 */
	public $notices = array();
	/**
	 * @since 1.0.0
	 * @var array
	 */
	public $html = '<div class="epsilon-framework-notice is-dismissible %1$s" data-unique-id="%2$s">%3$s</div>';

	/**
	 * Epsilon_Notifications constructor.
	 */
	public function __construct() {
		add_action( 'admin_notices', array( $this, 'display_notices' ) );
	}

	/**
	 * We need to grab instances of this object, so we can add multiple notices at the same time
	 *
	 * @return Epsilon_Notifications
	 */
	public static function get_instance() {
		if ( is_null( self::$instance ) ) {
			self::$instance = new self();
		}

		return self::$instance;
	}

	/**
	 * Adds a notice to the array
	 *
	 * @param array $notice
	 */
	public function add_notice( $notice = array() ) {
		$this->notices[] = $notice;
	}

	/**
	 * Displays notices in the frontend
	 *
	 * @since 1.0.0
	 */
	public function display_notices() {
		foreach ( $this->notices as $notice ) {
			if ( get_user_meta( get_current_user_id(), $notice['id'], true ) ) {
				continue;
			}

			printf( wp_kses_post( $this->html ), esc_attr( $notice['type'] ), esc_attr( $notice['id'] ), wp_kses_post( $notice['message'] ) );
		}
	}

	/**
	 * Dismiss notice AJAX
	 *
	 * @since 1.0.0
	 *
	 * @param $args
	 */
	public static function dismiss_notice( $args ) {
		add_user_meta( $args['user_id'], $args['notice_id'], 'true', true );

		return 'ok';
	}
}
