<?php
/**
 * PA Rollback
 */

namespace PremiumAddons\Admin\Includes;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Class Admin_Helper
 */
class PA_Rollback {

	/**
	 * Plugin URL
	 *
	 * @var package_url
	 */
	protected $package_url;

	/**
	 * Plugin Version
	 *
	 * @var version
	 */
	protected $version;

	/**
	 * Plugin Name
	 *
	 * @var plugin_name
	 */
	protected $plugin_name;

	/**
	 * Plugin Slug
	 *
	 * @var plugin_slug
	 */
	protected $plugin_slug;

	/**
	 * Constructor for the class
	 *
	 * @param array $args plugin args.
	 */
	public function __construct( $args = array() ) {
		$allowed = array( 'package_url', 'version', 'plugin_name', 'plugin_slug' );
		foreach ( $args as $key => $value ) {
			if ( in_array( $key, $allowed, true ) ) {
				$this->{$key} = $value;
			}
		}
	}

	/**
	 * Print Inline Style
	 *
	 * Used to print inline style on rollback page
	 *
	 * @since 0.0.1
	 * @access private
	 */
	private function print_inline_style() {
		?>

		<style>
			.wrap {
				overflow: hidden;
			}

			h1 {
				background: #6ec1e4;
				text-align: center;
				color: #fff !important;
				padding: 70px !important;
				text-transform: uppercase;
				letter-spacing: 1px;
				line-height: 1.4;
			}
			h1 img {
				max-width: 300px;
				display: block;
				margin: auto auto 50px;
			}

			/* Override WP 7.0 admin button line-height */
			.wrap .button {
				line-height: normal;
			}
		</style>

		<?php
	}

	/**
	 * Apply package
	 *
	 * @since 0.0.1
	 * @access private
	 */
	protected function apply_package() {

		$update_plugins = get_site_transient( 'update_plugins' );

		if ( ! is_object( $update_plugins ) ) {

			$update_plugins = new \stdClass();
		}

		$plugin_info = new \stdClass();

		$plugin_info->new_version = $this->version;

		$plugin_info->slug = $this->plugin_slug;

		$plugin_info->package = $this->package_url;

		$plugin_info->url = 'https://premiumaddons.com/';

		$update_plugins->response[ $this->plugin_name ] = $plugin_info;

		set_site_transient( 'update_plugins', $update_plugins );
	}

	/**
	 * Upgrade
	 *
	 * Rollback update
	 *
	 * @since 0.0.1
	 * @access private
	 */
	protected function upgrade() {

		require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';

		$logo_url = PREMIUM_ADDONS_URL . 'admin/images/pa-logo-symbol.png';

		$upgrader_args = array(
			'url'    => 'update.php?action=upgrade-plugin&plugin=' . rawurlencode( $this->plugin_name ),
			'plugin' => $this->plugin_name,
			'nonce'  => 'upgrade-plugin_' . $this->plugin_name,
			'title'  => '<img src="' . $logo_url . '" alt="Premium Addons">' . __( 'Rolling Back to Version ', 'premium-addons-for-elementor' ) . $this->version,
		);

		$this->print_inline_style();

		$upgrader = new \Plugin_Upgrader( new \Plugin_Upgrader_Skin( $upgrader_args ) );

		$upgrader->upgrade( $this->plugin_name );
	}

	/**
	 * Run
	 *
	 * Trigger rollback functions
	 *
	 * @since 0.0.1
	 * @access private
	 */
	public function run() {

		$this->apply_package();

		$this->upgrade();
	}
}
