<?php
/**
 * Class to register Jupiter X Overview dashboard widget.
 *
 * @package JupiterX_Core\Dashboard
 *
 * @since 1.1.0
 */

/**
 * Registers Jupiter X Overview dashboard widget.
 *
 * @since 1.1.0
 *
 * @package JupiterX_Core\Dashboard
 */
class JupiterX_Overview_Widget {

	/**
	 * Constructor.
	 *
	 * @since 1.1.0
	 */
	public function __construct() {
		add_action( 'wp_dashboard_setup', [ $this, 'register' ] );
		add_action( 'wp_network_dashboard_setup', [ $this, 'register' ] );
		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
	}

	/**
	 * Register dashboard widgets.
	 *
	 * @since 1.1.0
	 */
	public function register() {

		if ( ! defined( 'JUPITERX_VERSION' ) ) {
			return;
		}

		add_meta_box( 'jupiterx-dashboard-overview', esc_html__( 'Jupiter X Overview', 'jupiterx-core' ), [ $this, 'render_content' ], [ 'dashboard-network', 'dashboard' ], 'side', 'high' );
	}

	/**
	 * Enqueue dashboard scripts.
	 *
	 * @since 1.1.0
	 */
	public function enqueue_scripts() {

		if ( ! defined( 'JUPITERX_VERSION' ) ) {
			return;
		}

		$screen = get_current_screen();

		if ( ! in_array( $screen->id, [ 'dashboard-network', 'dashboard' ], true ) ) {
			return;
		}

		$base_folder = version_compare( JUPITERX_VERSION, '1.9.2', '<=' ) ? 'admin/' : '';

		wp_enqueue_style(
			'jupiterx-admin-dashboard',
			JUPITERX_ASSETS_URL . 'dist/css/' . $base_folder . 'dashboard-widgets' . JUPITERX_MIN_CSS . '.css',
			[],
			JUPITERX_VERSION
		);

		wp_enqueue_script(
			'jupiterx-admin-dashboard',
			JUPITERX_ASSETS_URL . 'dist/js/' . $base_folder . 'dashboard-widgets' . JUPITERX_MIN_JS . '.js',
			[ 'jquery' ],
			JUPITERX_VERSION,
			true
		);
	}

	/**
	 * Render content.
	 *
	 * @since 1.1.0
	 */
	public function render_content() {
		$is_network = is_network_admin();

		?>
		<div class="jupiterx-dashboard-widget" data-nonce="<?php echo esc_attr( wp_create_nonce( 'jupiterx_dashboard' ) ); ?>">
		<?php

			$this->render_content_header();

			if ( ! $is_network ) {
				$this->render_content_edits();
			}

			if ( $is_network ) {
				$this->render_content_tools();
			}

			$this->render_content_news();

			$this->render_content_footer();

		?>
		</div>
		<?php
	}

	/**
	 * Render header content partial.
	 *
	 * @since 1.1.0
	 */
	private function render_content_header() {
		?>
		<div class="jupiterx-admin-widget-overview-header">
			<div class="jupiterx-admin-widget-overview-branding">
				<div class="jupiterx-logo">
					<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32">
						<path d="M28 0H4C1.8 0 0 1.8 0 4v24c0 2.2 1.8 4 4 4h24c2.2 0 4-1.8 4-4V4c0-2.2-1.8-4-4-4zm-2.3 25.5h-2.9c-.9 0-1.8-.4-2.4-1.1l-3.9-4.7v-.2l2.3-2.8c.1-.1.2-.1.2 0l6.8 8.3c.3.2.2.5-.1.5zM25.9 7L11.5 24.4c-.6.7-1.4 1.1-2.4 1.1H6.3c-.3 0-.4-.3-.2-.5l7.3-8.8c.1-.1.1-.3 0-.4L6.1 7c-.2-.2-.1-.5.2-.5h2.9c.9 0 1.8.4 2.4 1.1l4.2 5.1c.1.1.4.1.5 0l4.2-5.1c.6-.7 1.4-1.1 2.4-1.1h2.9c.2 0 .3.3.1.5z" fill="#07f"/>
					</svg>
				</div>
				<span class="jupiterx-admin-widget-overview-version"><?php esc_html_e( 'Jupiter X', 'jupiterx-core' ); ?> v<?php echo esc_html( JUPITERX_VERSION ); ?></span>
			</div>
			<div class="jupiterx-admin-widget-overview-buttons-wrapper">
				<a href="<?php echo esc_url( admin_url( 'customize.php' ) ); ?>" class="button button-primary"><?php echo esc_html_e( 'Customize', 'jupiterx-core' ); ?></a>
				<a href="<?php echo esc_url( admin_url( 'admin.php?page=jupiterx' ) ); ?>" class="button button-secondary"><?php echo esc_html_e( 'Control Panel', 'jupiterx-core' ); ?></a>
			</div>
		</div>
		<?php
	}

	/**
	 * Render recently edited content partial.
	 *
	 * @since 1.1.0
	 */
	private function render_content_edits() {
		$args = [
			'post_type'      => [ 'post', 'portfolio', 'page' ],
			'post_status'    => [ 'publish', 'draft' ],
			'posts_per_page' => '3',
			'orderby'        => 'modified',
		];

		$query = new WP_Query( $args );

		if ( $query->have_posts() ) : ?>
			<div class="jupiterx-admin-widget-overview-recent">
				<h3 class="jupiterx-admin-widget-overview-heading"><?php esc_html_e( 'Recently Edited', 'jupiterx-core' ); ?></h3>
				<ul>
					<?php
					while ( $query->have_posts() ) :
						$query->the_post();

						$date = date_i18n( _x( 'M jS', 'Dashboard Overview Widget Recently Date', 'jupiterx-core' ), get_the_modified_time( 'U' ) );
						?>
						<li class="jupiterx-admin-widget-overview-recent-post">
							<a href="<?php echo esc_url( get_edit_post_link( get_the_ID() ) ); ?> " class="jupiterx-admin-widget-overview-recent-post-link"><?php the_title(); ?> <span class="dashicons dashicons-edit"></span></a> <span><?php echo esc_html( $date ); ?>, <?php the_time(); ?></span>
						</li>
					<?php endwhile; ?>
				</ul>
			</div>
		<?php endif;
	}

	/**
	 * Render tools content partial.
	 *
	 * @since 1.1.0
	 */
	private function render_content_tools() {
		$tools = [
			'flush-network-cache' => [
				'title' => esc_html__( 'Flush network cache', 'jupiterx-core' ),
				'desc' => esc_html__( "Regenerate Jupiter X and Elementor's cache in all network sites.", 'jupiterx-core' ),
			],
		];

		?>
		<div class="jupiterx-admin-widget-overview-tools">
			<h3 class="jupiterx-admin-widget-overview-heading"><?php esc_html_e( 'Tools', 'jupiterx-core' ); ?></h3>
			<ul>
				<?php foreach ( $tools as $tool_slug => $tool ) : ?>
					<li class="jupiterx-admin-widget-overview-tool">
						<div>
							<span class="jupiterx-admin-widget-overview-tool-title"><?php echo esc_html( $tool['title'] ); ?></span>
							<span class="jupiterx-admin-widget-overview-tool-desc jupiterx-ajax-response"><?php echo esc_html( $tool['desc'] ); ?></span>
						</div>
						<button type="button" class="button button-primary" data-jupiterx-tool="<?php echo esc_html( $tool_slug ); ?>"><?php esc_html_e( 'Run', 'jupiterx-core' ); ?></button>
					</li>
				<?php endforeach; ?>
			</ul>
		</div>
		<?php
	}

	/**
	 * Render news & updates content partial.
	 *
	 * @since 1.1.0
	 */
	private function render_content_news() {
		$blog_feed = $this->get_blog_posts();

		if ( ! empty( $blog_feed ) ) : ?>
			<div class="jupiterx-admin-widget-overview-feed">
				<h3 class="jupiterx-admin-widget-overview-heading"><?php esc_html_e( 'News & Updates', 'jupiterx-core' ); ?></h3>
				<ul class="jupiterx-admin-widget-overview-posts">
					<?php $badge = true; ?>
					<?php foreach ( $blog_feed as $feed_item ) :
						$utm = [
							'utm_source' => 'JupiterXOverviewWidget',
							'utm_medium' => 'JupiterXWPDashboard',
						];
						$url = add_query_arg( $utm, $feed_item['link'] );
					?>
						<li class="jupiterx-admin-widget-overview-post">
							<a href="<?php echo esc_url( $url ); ?>" class="jupiterx-admin-widget-overview-post-link" target="_blank">
								<?php if ( $badge ) : ?>
									<span class="jupiterx-admin-widget-overview-badge"><?php esc_html_e( 'New', 'jupiterx-core' ); ?></span>
									<?php $badge = false; ?>
								<?php endif; ?>
								<?php echo esc_html( $feed_item['title']['rendered'] ); ?>
							</a>
							<p class="jupiterx-admin-widget-overview-post-description"><?php echo esc_html( wp_strip_all_tags( $feed_item['excerpt']['rendered'] ) ); ?></p>
						</li>
					<?php endforeach; ?>
				</ul>
			</div>
		<?php endif;
	}

	/**
	 * Render footer content partial.
	 *
	 * @since 1.1.0
	 */
	private function render_content_footer() {
		$links = [
			'blog' => [
				'title'  => esc_html__( 'Blog', 'jupiterx-core' ),
				'link'   => 'https://themes.artbees.net/blog/',
				'target' => '_blank',
			],
			'help' => [
				'title'  => esc_html__( 'Help', 'jupiterx-core' ),
				'link'   => 'http://help.artbees.net/',
				'target' => '_blank',
			],
		];

		if ( function_exists( 'jupiterx_is_pro' ) && ! jupiterx_is_pro() ) {
			$links['upgrade'] = [
				'title'  => __( 'Upgrade', 'jupiterx-core' ),
				'link'   => 'https://themeforest.net/item/jupiter-multipurpose-responsive-theme/5177775?ref=artbees&utm_source=DashboardNewsUpdatesWidgetUpgradeLink&utm_medium=AdminUpgradePopup&utm_campaign=FreeJupiterXAdminUpgradeCampaign',
				'target' => '_blank',
			];
		}

		?>
		<div class="jupiterx-admin-widget-overview-footer">
			<ul>
				<?php foreach ( $links as $link_slug => $link ) : ?>
					<li class="jupiterx-admin-widget-overview-footer-<?php echo esc_attr( $link_slug ); ?>">
						<a href="<?php echo esc_url( $link['link'] ); ?>" <?php echo isset( $link['class'] ) ? 'class="' . esc_attr( $link['class'] ) . '"' : ''; ?> <?php echo isset( $link['target'] ) ? 'target="' . esc_attr( $link['target'] ) . '"' : ''; ?>>
							<?php echo esc_html( $link['title'] ); ?>
							<span class="screen-reader-text"><?php esc_html_e( '(opens in a new window)', 'jupiterx-core' ); ?></span>
							<span aria-hidden="true" class="dashicons dashicons-external"></span>
						</a>
					</li>
				<?php endforeach; ?>
			</ul>
		</div>
		<?php
	}

	/**
	 * Function to fetch bog posts.
	 *
	 * @since 1.1.0
	 *
	 * @return array $feed List of blog posts.
	 */
	private function get_blog_posts() {
		$feed = get_transient( 'jupiterx_admin_widget_posts' );

		if ( ! empty( $feed ) ) {
			return $feed;
		}

		$response = wp_safe_remote_get(
			add_query_arg(
				[ 'per_page' => 3 ],
				'https://themes.artbees.net/wp-json/wp/v2/posts'
			)
		);

		if ( is_wp_error( $response ) ) {
			return false;
		}

		if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
			return false;
		}

		$feed = json_decode( wp_remote_retrieve_body( $response ), true );

		set_transient( 'jupiterx_admin_widget_posts', $feed, 12 * HOUR_IN_SECONDS );

		return $feed;
	}
}

new JupiterX_Overview_Widget();
