"use strict";

// TODO: tablesorter shouldn't sort already sorted columns
// eslint-disable-next-line no-unused-vars
function initTableSorter(tabid) {
  var $table;
  var opts;

  switch (tabid) {
    case 'statustabs_queries':
      $table = $('#serverStatusQueriesDetails');
      opts = {
        sortList: [[3, 1]],
        headers: {
          1: {
            sorter: 'fancyNumber'
          },
          2: {
            sorter: 'fancyNumber'
          }
        }
      };
      break;
  }

  $table.tablesorter(opts);
  $table.find('tr').first().find('th').append('<div class="sorticon"></div>');
}

$(function () {
  $.tablesorter.addParser({
    id: 'fancyNumber',
    is: function is(s) {
      return /^[0-9]?[0-9,\\.]*\s?(k|M|G|T|%)?$/.test(s);
    },
    format: function format(s) {
      var num = jQuery.tablesorter.formatFloat(s.replace(Messages.strThousandsSeparator, '').replace(Messages.strDecimalSeparator, '.'));
      var factor = 1;

      switch (s.charAt(s.length - 1)) {
        case '%':
          factor = -2;
          break;
        // Todo: Complete this list (as well as in the regexp a few lines up)

        case 'k':
          factor = 3;
          break;

        case 'M':
          factor = 6;
          break;

        case 'G':
          factor = 9;
          break;

        case 'T':
          factor = 12;
          break;
      }

      return num * Math.pow(10, factor);
    },
    type: 'numeric'
  });
  $.tablesorter.addParser({
    id: 'withinSpanNumber',
    is: function is(s) {
      return /<span class="original"/.test(s);
    },
    format: function format(s, table, html) {
      var res = html.innerHTML.match(/<span(\s*style="display:none;"\s*)?\s*class="original">(.*)?<\/span>/);
      return res && res.length >= 3 ? res[2] : 0;
    },
    type: 'numeric'
  });
});