<?php
/**
 * Welcome Notice Class.
 *
 * @package   olympus-google-fonts
 * @copyright Copyright (c) 2020, Fonts Plugin
 * @license   http://opensource.org/licenses/gpl-2.0.php GNU Public License
 */

if ( ! class_exists( 'OGF_Welcome' ) ) :
	/**
	 * The welcome.
	 */
	class OGF_Welcome {

		/**
		 * Slug.
		 *
		 * @var string $slug
		 */
		private $slug;

		/**
		 * Message.
		 *
		 * @var string $message
		 */
		private $message;

		/**
		 * Type.
		 *
		 * @var string $type
		 */
		private $type;

		/**
		 * Class constructor.
		 *
		 * @param string $slug Slug.
		 * @param string $message Message.
		 * @param string $type Type.
		 */
		public function __construct( $slug, $message, $type = 'success' ) {

			if ( ! is_admin() ) {
				return;
			}

			$this->slug    = $slug;
			$this->message = $message;
			$this->type    = $type;

			// Add actions.
			add_action( 'admin_notices', array( $this, 'display_admin_notice' ) );
			add_action( 'wp_ajax_ogf_dismiss_notice', array( $this, 'dismiss_notice' ) );
			add_action( 'admin_init', array( $this, 'dismiss_notice_backup' ) );
			add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
		}

		/**
		 * Enqeue the styles and scripts.
		 */
		public function enqueue() {
			wp_enqueue_script( 'ogf-admin', esc_url( OGF_DIR_URL . 'assets/js/admin.js' ), array( 'jquery' ), OGF_VERSION, false );
		}

		/**
		 * AJAX handler to store the state of dismissible notices.
		 */
		public function dismiss_notice() {
			// phpcs:ignore WordPress.Security.NonceVerification.Missing -- AJAX handler for dismissing notices, safe operation.
			if ( isset( $_POST['type'] ) ) {
				// Pick up the notice "type" - passed via jQuery (the "data-notice" attribute on the notice).
				// phpcs:ignore WordPress.Security.NonceVerification.Missing -- Same as above.
				$type = sanitize_text_field( wp_unslash( $_POST['type'] ) );
				update_option( 'dismissed-' . $type, true );
			}
		}

		/**
		 * Backup method to remove notice.
		 */
		public function dismiss_notice_backup() {
			// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Simple notice dismissal, safe operation.
			if ( isset( $_GET['dismiss_ogf_welcome'] ) ) {
				update_option( 'dismissed-' . $this->slug, true );
			}
		}

		/**
		 * Display the admin notice.
		 */
		public function display_admin_notice() {
			if ( get_option( 'dismissed-' . $this->slug, false ) ) {
				return;
			}
			?>

			<div class="notice notice-<?php echo esc_attr( $this->type ); ?> is-dismissible notice-dismiss-dc" data-notice="<?php echo esc_attr( $this->slug ); ?>">
				<p>
					<?php
						// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Message is set by plugin, contains safe HTML.
						echo $this->message;
					?>
				</p>
			</div>
			<?php
		}
	}
endif;

$message = sprintf(
	// translators: %s Link to Google Fonts customizer panel.
	__( 'Thank you for installing <strong>Google Fonts for WordPress</strong>! Configure your fonts here: <a href="%s">WordPress Customizer</a>', 'olympus-google-fonts' ),
	esc_url( admin_url( '/customize.php?autofocus[panel]=ogf_google_fonts' ) )
);

/*
* Instantiate the OGF_Welcome class.
*/
new OGF_Welcome( 'ogf-welcome', $message, 'success' );
