/* eslint-disable no-undef */
(function($) {

  $(document).ready(function() {

    // Adds WUChosen.js to our custom select input
    const $jumper = $('#wu-jumper-select').selectize({
      create: false,
      maxItems: 1,
      optgroupField: 'group',
      optgroupValueField: 'value',
      searchField: ['text', 'name', 'display_name', 'domain', 'title', 'desc', 'code'],
      render: {
        option(option) {

          if (typeof option.model === 'undefined') {

            option.model = 'jumper-link';

          } // end if;

          if (typeof option.text === 'undefined') {

            option.text = option.reference_code || option.name || option.title || option.display_name || option.code;

          } // end if;

          if (typeof option.group === 'undefined') {

            option.group = option.model;

          } // end if;

          const template_html = jQuery('#wu-template-' + option.model).length ?
            jQuery('#wu-template-' + option.model).html() :
            jQuery('#wu-template-default').html();

          const template = _.template(template_html, {
            interpolate: /\{\{(.+?)\}\}/g,
          });

          return template(option);

        },
      },
      load(query, callback) {

        if (! query.length) {

          return callback();

        } // end if;

        $('#wu-jumper .wu-jumper-loading').show();

        jQuery.ajax({
          // eslint-disable-next-line no-undef
          url: wu_jumper_vars.ajaxurl,
          type: 'POST',
          data: {
            action: 'wu_search',
            model: 'all',
            number: 99,
            query: {
              search: '*' + query + '*',
            },
          },
          error() {

            callback();

          },
          success(res) {

            $('#wu-jumper .wu-jumper-loading').hide();

            callback(res);

          },
        });

      },
    });

    const is_local_url = function(url) {

      return url.toLowerCase().indexOf(wu_jumper_vars.base_url) >= 0 || url.toLowerCase().indexOf(wu_jumper_vars.network_base_url) >= 0;

    }; // end is_local_url

    // Every time the value changes, we need to redirect the user
    $jumper.on('change', function() {

      // Check if we need to open this in a new tab
      if (is_local_url($(this).val())) {

        window.location.href = $(this).val();

        $(this).parent().parent().find('.wu-jumper-redirecting').show();

      } else {

        window.open($(this).val(), '_blank');

        $($jumper.parent()).hide();

      } // end if;

    });

    // Closes on clicking other elements
    $(document).on('click', ':not(#wu-jumper-button-trigger)', function(e) {

      const target = e.target;

      if ($(target).attr('id') === 'wu-jumper-button-trigger' || $(target).parent().attr('id') === 'wu-jumper-button-trigger') {

        return;

      } // end if;

      if (! $(target).is($jumper.parent()) && ! $(target).parents().is($jumper.parent())) {

        $($jumper.parent().parent()).hide();

      } // end if;

    });

    const trigger_key = wu_jumper_vars.trigger_key.charAt(0);

    // Our bar is hidden by default, we need to display it when a certain shortcut is pressed
    Mousetrap.bind(['command+option+' + trigger_key, 'ctrl+alt+' + trigger_key], function(e) {

      e.preventDefault();

      open_jumper();

    }); // end mousetrap;

    $(document).on('click', '#wu-jumper-button-trigger', function(e) {

      e.preventDefault();

      open_jumper();

    });

    /**
     * Actually opens the jumper.
     */
    function open_jumper() {

      $('#wu-jumper').show();

      $('#wu-jumper').find('input').focus();

      return false;

    } // end open_jumper;

  });

}(jQuery));