<?php
/**
 * Class responsible for general admin notices.
 *
 * Notices for guiding to proper configuration of this plugin.
 *
 * @package Event_Bridge_For_ActivityPub
 * @since 1.0.0
 * @license AGPL-3.0-or-later
 */

namespace Event_Bridge_For_ActivityPub\Admin;

// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore

/**
 * Class responsible for general admin notices.
 *
 * Notices for guiding to proper configuration of this plugin.
 *   - ActivityPub plugin not installed and activated
 *   - No supported Event Plugin installed and activated
 *
 * @since 1.0.0
 */
class General_Admin_Notices {
	/**
	 * URL of the ActivityPub plugin. Needed when the ActivityPub plugin is not installed.
	 */
	const ACTIVITYPUB_PLUGIN_URL = 'https://wordpress.org/plugins/activitypub';

	const EVENT_BRIDGE_FOR_ACTIVITYPUB_SUPPORTED_EVENT_PLUGINS_URL = 'https://code.event-federation.eu/Event-Federation/wordpress-event-bridge-for-activitypub#supported-event-plugins';

	/**
	 * Allowed HTML for admin notices.
	 *
	 * @var array
	 */
	const ALLOWED_HTML = array(
		'a' => array(
			'href'   => true,
			'title'  => true,
			'target' => true,
		),
		'br',
		'i',
	);

	/**
	 * Admin notice when the ActivityPub plugin is not enabled.
	 *
	 * @return string
	 */
	public static function get_admin_notice_activitypub_plugin_not_enabled(): string {
		return sprintf(
			/* translators: 1: An URL that points to the ActivityPub plugin. */
			_x(
				'For the Event Bridge for ActivityPub to work, you will need to install and activate the <a href="%1$s">ActivityPub</a> plugin.',
				'admin notice',
				'event-bridge-for-activitypub'
			),
			esc_html( self::ACTIVITYPUB_PLUGIN_URL )
		);
	}

	/**
	 * Admin notice when the ActivityPub plugin version is too old.
	 *
	 * @return string
	 */
	public static function get_admin_notice_activitypub_plugin_version_too_old(): string {
		return sprintf(
			/* translators: 1: The name of the ActivityPub plugin. 2: The minimum required version number of the ActivityPub plugin. */
			_x(
				'Please upgrade your <a href="%1$s">ActivityPub</a> plugin. At least version %2$s is required for the Event Bridge for ActivityPub to work.',
				'admin notice',
				'event-bridge-for-activitypub'
			),
			esc_html( self::ACTIVITYPUB_PLUGIN_URL ),
			esc_html( EVENT_BRIDGE_FOR_ACTIVITYPUB_ACTIVITYPUB_PLUGIN_MIN_VERSION )
		);
	}

	/**
	 * Warning that no supported event plugin can be found.
	 *
	 * @return string
	 */
	public static function get_admin_notice_no_supported_event_plugin_active(): string {
		return sprintf(
			/* translators: 1: An URL to the list of supported event plugins. */
			_x(
				'The Plugin <i>Event Bridge for ActivityPub</i> is of no use, because you do not have installed and activated a supported Event Plugin.
				<br> For a list of supported Event Plugins see  <a href="%1$s" target="_blank">here</a>.',
				'admin notice',
				'event-bridge-for-activitypub'
			),
			esc_url( self::EVENT_BRIDGE_FOR_ACTIVITYPUB_SUPPORTED_EVENT_PLUGINS_URL )
		);
	}

	/**
	 * Warning to fix status issues first.
	 *
	 * @return string
	 */
	public static function get_admin_notice_status_not_ok(): string {
		return sprintf(
			/* translators: 1: An URL to the list of supported event plugins. */
			_x(
				'The Plugin <i>Event Bridge for ActivityPub</i> is of no use, because you do not have installed and activated a supported Event Plugin.
				<br> For a list of supported Event Plugins see  <a href="%1$s">here</a>.',
				'admin notice',
				'event-bridge-for-activitypub'
			),
			esc_html( self::EVENT_BRIDGE_FOR_ACTIVITYPUB_SUPPORTED_EVENT_PLUGINS_URL )
		);
	}

	/**
	 * Warning if the plugin is Active and the ActivityPub plugin is not.
	 *
	 * @return void
	 */
	public static function activitypub_plugin_not_enabled(): void {
		$notice = self::get_admin_notice_activitypub_plugin_not_enabled();
		echo '<div class="notice notice-warning"><p>' . \wp_kses( $notice, self::ALLOWED_HTML ) . '</p></div>';
	}

	/**
	 * Warning if the plugin is Active and the ActivityPub plugins version is too old.
	 *
	 * @return void
	 */
	public static function activitypub_plugin_version_too_old(): void {
		$notice = self::get_admin_notice_activitypub_plugin_version_too_old();
		echo '<div class="notice notice-warning"><p>' . \wp_kses( $notice, self::ALLOWED_HTML ) . '</p></div>';
	}

	/**
	 * Warning when no supported Even Plugin is installed and active.
	 *
	 * @return void
	 */
	public static function no_supported_event_plugin_active(): void {
		$notice = self::get_admin_notice_no_supported_event_plugin_active();
		echo '<div class="notice notice-warning"><p>' . \wp_kses( $notice, self::ALLOWED_HTML ) . '</p></div>';
	}
}
