/* global wu_setup, wu_setup_settings, ajaxurl, wu_block_ui_polyfill, _wu_block_ui_polyfill  */
(function($) {

  window._wu_block_ui_polyfill = wu_block_ui_polyfill;

  wu_block_ui_polyfill = function() { };

  $(document).ready(function() {

    // Click button
    // Generates queue
    // Start to process queue items one by one
    // Changes the status
    // Move to the next item
    // When all is done, redirect to the next page via a form submission
    $('#poststuff').on('submit', 'form', function(e) {

      e.preventDefault();

      const $form = $(this);

      const install_id = $form.find('table[data-id]').data('id');

      $form.find('[name=next]').attr('disabled', 'disabled');

      let queue = $form.find('tr[data-content]');

      /*
       * Only keep items selected on the queue.
       */
      queue = queue.filter(function() {

        const checkbox = $(this).find('input[type=checkbox]');

        if (checkbox.length) {

          return checkbox.is(':checked');

        } // end if;

        return true;

      });

      let successes = 0;

      let index = 0;

      process_queue_item(queue.eq(index));

      /**
       * Process the queue items one by one recursively.
       *
       * @param {string} item The item to process.
       */
      function process_queue_item(item) {

        window.onbeforeunload = function() {

          return '';

        };

        if (item.length === 0) {

          if (queue.length === successes || install_id === 'migration') {

            window.onbeforeunload = null;

            _wu_block_ui_polyfill($('#poststuff .inside'));

            setTimeout(() => {

              $form.get(0).submit();

            }, 100);

          } // end if;

          $form.find('[name=next]').removeAttr('disabled');

          return false;

        } // end if;

        const $item = $(item);

        const content = $item.data('content');

        $item.get(0).scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });

        $item.find('td.status')
          .attr('class', '')
          .addClass('status')
          .find('> span').html(wu_setup[content].installing).end()
          .find('.spinner').addClass('is-active').end()
          .find('a.help').slideUp();

        // Ajax request
        $.ajax({
          url: ajaxurl,
          method: 'post',
          data: {
            action: 'wu_setup_install',
            installer: content,
            'dry-run': wu_setup_settings.dry_run,
          },
          success(data) {

            if (data.success === true) {

              $item.find('td.status')
                .attr('class', '')
                .addClass('status wu-text-green-600')
                .find('> span').html(wu_setup[content].success).end()
                .find('.spinner').removeClass('is-active');

              $item.removeAttr('data-content');

              successes++;

            } else {

              $item.find('td.status')
                .attr('class', '')
                .addClass('status wu-text-red-400')
                .find('> span').html(data.data[0].message).end()
                .find('.spinner').removeClass('is-active').end()
                .find('a.help').slideDown();

            } // end if;

            index++;

            process_queue_item(queue.eq(index));

          },
          error() {

            $item.find('td.status')
              .attr('class', '')
              .addClass('status wu-text-red-400')
              .find('span').html('').end()
              .find('.spinner').removeClass('is-active').end()
              .find('a.help').slideDown();

            index++;

            process_queue_item(queue.eq(index));

          },
        });

      } // end process_queue_item;

    });

  });

}(jQuery));

if (typeof wu_initialize_tooltip !== 'function') {

  const wu_initialize_tooltip = function() {

    jQuery('[role="tooltip"]').tipTip({
      attribute: 'aria-label',
    });

  }; // end wu_initialize_tooltip;

  // eslint-disable-next-line no-unused-vars
  const wu_block_ui = function(el) {

    jQuery(el).wu_block({
      message: '<span>Please wait...</span>',
      overlayCSS: {
        backgroundColor: '#FFF',
        opacity: 0.6,
      },
      css: {
        padding: 0,
        margin: 0,
        width: '50%',
        fontSize: '14px !important',
        top: '40%',
        left: '35%',
        textAlign: 'center',
        color: '#000',
        border: 'none',
        backgroundColor: 'none',
        cursor: 'wait',
      },
    });

    return jQuery(el);

  };

  (function($) {

    $(document).ready(function() {

      wu_initialize_tooltip();

    });

  }(jQuery));

} // end if;
