/*global jQuery, ajaxurl, addLoadEvent */
(function () {
	'use strict';

	addLoadEvent(
		function () {
			var form            = jQuery('#wpml_media_options_form');
			var form_action     = form.find('#wpml_media_options_action');
			var existingContent = form.find('.wpml-media-existing-content');
			var setLanguageInfo = form.find('input[name=set_language_info]');
			var submitButton    = form.find(':submit');
			var primaryButton   = form.find('.button-primary');

			existingContent.find(':checkbox').change(
				function () {
					var set_language_required_missing = !setLanguageInfo.prop('disabled') && !setLanguageInfo.prop('checked');
					var checked                       = existingContent.find(':checkbox:checked');

					if (!checked.length || set_language_required_missing) {
						primaryButton.addClass('disabled');
					} else {
						primaryButton.removeClass('disabled');
					}
				}
			);

			submitButton.click(
				function () {
					form_action.val(jQuery(this).attr('name'));
				}
			);

			form.submit(
				function () {

					if (!submitButton.attr('disabled')) {

						switch (form_action.val()) {
							case 'start':
								wpml_media_options_form_working();
								wpml_media_options_form_scan_prepare();
								break;
							case 'set_defaults':
								wpml_media_set_content_prepare();
								break;
						}
					}

					form_action.val(0);
					return false;
				}
			);

			function wpml_update_status(message) {
				jQuery(form).find('.status').html(message);
				if (message.length > 0) {
					jQuery(form).find('.status').show();
				} else {
					jQuery(form).find('.status').fadeOut();
				}
			}

			function wpml_media_options_form_working() {
				wpml_update_status('');
				submitButton.prop('disabled', true);
				jQuery(form).find('.progress').fadeIn();
			}

			function wpml_media_options_form_finished(status) {
				submitButton.prop('disabled', false);
				jQuery(form).find('.progress').fadeOut();
				wpml_update_status(status);
				window.setTimeout(
					function () {
						wpml_update_status('');
					}, 1000
				);
			}

			function wpml_media_options_form_scan_prepare() {

				jQuery.ajax(
					{
						url:      ajaxurl,
						type:     'POST',
						data:     {action: 'wpml_media_scan_prepare'},
						dataType: 'json',
						success:  function (ret) {
							wpml_update_status(ret.message);
							if (jQuery('#wpml_media_options_form').find('input[name=no_lang_attachments]').val() > 0) {
								// step 1
								wpml_media_set_initial_language();
							} else {
								// step 2
								wpml_media_translate_media();
							}
						},
						error:    function (jqXHR, textStatus) {
							jQuery('#icl-migrate-progress').find('.message').html(textStatus);
						}

					}
				);

			}

			function wpml_media_set_initial_language() {

				if (jQuery('#set_language_info', form).is(':checked')) {
					jQuery.ajax(
						{
							url:      ajaxurl,
							type:     'POST',
							data:     {action: 'wpml_media_set_initial_language'},
							dataType: 'json',
							success:  function (ret) {
								wpml_update_status(ret.message);
								if (ret.left > 0) {
									wpml_media_set_initial_language();
								} else {
									// step 2
									wpml_media_translate_media();
								}
							},
							error:    function (jqXHR, textStatus) {
								wpml_update_status('Set initial language: please try again (' + textStatus + ')');
							}

						}
					);
				} else {
					wpml_media_translate_media();
				}

			}

			function wpml_media_translate_media() {
				if (jQuery('#translate_media', form).is(':checked')) {
					jQuery.ajax(
						{
							url:      ajaxurl,
							type:     'POST',
							data:     {action: 'wpml_media_translate_media'},
							dataType: 'json',
							success:  function (ret) {
								wpml_update_status(ret.message);
								if (ret.left > 0) {
									wpml_media_translate_media();
								} else {
									// step 2
									wpml_media_duplicate_media();
								}
							},
							error:    function (jqXHR, textStatus) {
								wpml_update_status('Translate media: please try again (' + textStatus + ')');
							}

						}
					);
				} else {
					wpml_media_duplicate_media();
				}
			}

			function wpml_media_duplicate_media() {

				if (jQuery('#duplicate_media', form).is(':checked')) {
					jQuery.ajax(
						{
							url:      ajaxurl,
							type:     'POST',
							data:     {action: 'wpml_media_duplicate_media'},
							dataType: 'json',
							success:  function (ret) {
								wpml_update_status(ret.message);
								if (ret.left > 0) {
									wpml_media_duplicate_media();
								} else {
									// step 3
									wpml_media_duplicate_featured_images();
								}
							},
							error:    function (jqXHR, textStatus) {
								wpml_update_status('Duplicate media: please try again (' + textStatus + ')');
							}

						}
					);
				} else {
					wpml_media_duplicate_featured_images();
				}
			}

			function wpml_media_duplicate_featured_images( left = null ) {
				if (jQuery('#duplicate_featured', form).is(':checked')) {
					const nonce = document.getElementById( 'wpml_media_settings_nonce' );
					jQuery.ajax(
						{
							url:      ajaxurl,
							type:     'POST',
							data:     {
								action: 'wpml_media_duplicate_featured_images',
								nonce: nonce ? nonce.value : '',
								featured_images_left: left
							},
							dataType: 'json',
							success:  function (ret) {
								wpml_update_status(ret.message);
								if (ret.left > 0) {
									wpml_media_duplicate_featured_images( ret.left );
								} else {
									wpml_media_mark_processed();
								}
							},
							error:    function (jqXHR, textStatus) {
								wpml_update_status('Duplicate featured images: Please try again (' + textStatus + ')');
							}

						}
					);
				} else {
					wpml_media_mark_processed();
				}
			}

			function wpml_media_mark_processed() {

				jQuery.ajax(
					{
						url:      ajaxurl,
						type:     'POST',
						data:     {action: 'wpml_media_mark_processed'},
						dataType: 'json',
						success:  function (ret) {
							wpml_media_options_form_finished(ret.message);
							jQuery('#wpml_media_all_done').fadeIn();
						},
						error:    function (jqXHR, textStatus) {
							wpml_update_status('Mark processed: Please try again (' + textStatus + ')');
						}

					}
				);

			}

			function wpml_media_set_content_prepare() {
				wpml_update_status('');
				submitButton.attr('disabled', 'disabled');
				jQuery(form).find('.content_default_progress').fadeIn();

				jQuery.ajax(
					{
						url:      ajaxurl,
						type:     'POST',
						data:     {
							action: 'wpml_media_set_content_prepare'
						},
						dataType: 'json',
						success:  function (ret) {
							jQuery(form).find('.content_default_status').html(ret.message);
							wpml_media_set_content_defaults();
						},
						error:    function (jqXHR, textStatus) {
							wpml_update_status('Set Content Prepare: Please try again (' + textStatus + ')');
						}
					}
				);

			}

			function wpml_media_set_content_defaults() {
				wpml_update_status('');
				submitButton.attr('disabled', 'disabled');
				jQuery(form).find('.content_default_progress').fadeIn();

				jQuery.ajax(
					{
						url:      ajaxurl,
						type:     'POST',
						data:     {
							action:                 'wpml_media_set_content_defaults',
							always_translate_media: jQuery('input[name=content_default_always_translate_media]', form).is(':checked'),
							duplicate_media:        jQuery('input[name=content_default_duplicate_media]', form).is(':checked'),
							duplicate_featured:     jQuery('input[name=content_default_duplicate_featured]', form).is(':checked')
						},
						dataType: 'json',
						success:  function (ret) {
							jQuery(form).find('.content_default_status').html(ret.message);
							wpml_media_set_content_defaults_finished();
						},
						error:    function (jqXHR, textStatus) {
							wpml_update_status('Set Content Defaults: Please try again (' + textStatus + ')');
						}
					}
				);

			}

			function wpml_media_set_content_defaults_finished(status) {
				submitButton.prop('disabled', false);
				jQuery(form).find('.content_default_progress').fadeOut();
				jQuery(form).find('.content_default_status').html(status);
				window.setTimeout(
					function () {
						jQuery(form).find('.content_default_status').fadeOut();
					}, 1000
				);
			}

		}
	);
}());
