(function($){

	AstraSitesInstallTheme = {

		/**
		 * Init
		 */
		init: function() {
			this._auto_close_notice();
			this._bind();
		},

		/**
		 * Binds events for the Astra Sites.
		 *
		 * @since 1.3.2
		 *
		 * @access private
		 * @method _bind
		 */
		_bind: function()
		{
			$( document ).on( 'click', '.astra-sites-theme-not-installed', AstraSitesInstallTheme._install_and_activate );
			$( document ).on( 'click', '.astra-sites-theme-installed-but-inactive', AstraSitesInstallTheme._activateTheme );
			$( document ).on( 'wp-theme-install-success' , AstraSitesInstallTheme._activateTheme);
		},

		/**
		 * Close Getting Started Notice
		 *
		 * @param  {object} event
		 * @return void
		 */
		_auto_close_notice: function() {

			if( $( '.astra-sites-getting-started-btn' ).length ) {
				$.ajax({
					url: AstraSitesInstallThemeVars.ajaxurl,
					type: 'POST',
					data: {
						'action' : 'astra-sites-getting-started-notice',
						'_ajax_nonce' : AstraSitesInstallThemeVars._ajax_nonce,
					},
				})
				.done(function (result) {
				});
			}

		},

		/**
		 * Activate Theme
		 *
		 * @since 1.3.2
		 */
		_activateTheme: function( event, response ) {
			event.preventDefault();

			$('#astra-theme-activation-nag a').addClass('processing');

			if( response ) {
				$('#astra-theme-activation-nag a').text( AstraSitesInstallThemeVars.installed );
			} else {
				$('#astra-theme-activation-nag a').text( AstraSitesInstallThemeVars.activating );
			}

			// WordPress adds "Activate" button after waiting for 1000ms. So we will run our activation after that.
			setTimeout( function() {

				$.ajax({
					url: AstraSitesInstallThemeVars.ajaxurl,
					type: 'POST',
					data: {
						'action' : 'astra-sites-activate-theme',
						'_ajax_nonce' : AstraSitesInstallThemeVars._ajax_nonce,
					},
				})
				.done(function (result) {
					if( result.success ) {
						$('.astra-sites-theme-action-link').parent().html( AstraSitesInstallThemeVars.activated + ' 🎉' );
					}

				});

			}, 3000 );

		},

		/**
		 * Install and activate
		 *
		 * @since 1.3.2
		 *
		 * @param  {object} event Current event.
		 * @return void
		 */
		_install_and_activate: function(event ) {
			event.preventDefault();
			var theme_slug = $(this).data('theme-slug') || '';
			var btn = $( event.target );

			if ( btn.hasClass( 'processing' ) ) {
				return;
			}

			btn.text( AstraSitesInstallThemeVars.installing ).addClass('processing');

			if ( wp.updates.shouldRequestFilesystemCredentials && ! wp.updates.ajaxLocked ) {
				wp.updates.requestFilesystemCredentials( event );
			}

			wp.updates.installTheme( {
				slug: theme_slug
			});
		}

	};

	/**
	 * Initialize
	 */
	$(function(){
		AstraSitesInstallTheme.init();
	});

})(jQuery);