
/* global hexo */
hexo.extend.helper.register('is_root', isRoot);
hexo.extend.helper.register('get_langs', getLangs);
hexo.extend.helper.register('switch_lang', switchLang);
hexo.extend.helper.register('getPath', getPath);
hexo.extend.helper.register('stripHTTPS', stripHTTPS);
hexo.extend.helper.register('groupBy', groupBy);

function isRoot() {
  const lang = this.page.lang;
  return this.page.path === 'index.html' || this.page.path === `${lang}/index.html`;
}

function getLangs() {
  return this.config.language.filter(lang => lang !== 'default');
}

function switchLang(lang) {
  if (typeof lang === 'undefined') return '';
  if (this.is_root()) return this.url_for(lang);
  if (this.page.lang === lang) return '';
  const langReg = new RegExp(`^${this.page.lang}/`);
  if (langReg.test(this.page.path)) {
    return this.url_for(this.page.path.replace(langReg, `${lang}/`));
  }
  return '';
}

function getPath() {
  const url = this.page.path;
  const filename = url.substr(3);
  const splitPath = filename.split('/');
  return splitPath[0];
}

function stripHTTPS(x) {
  return x.split('://')[1];
}

function groupBy(arr, fn) {
  let result = {};
  for (const element of arr) {
     const key = fn(element);
     if (!(key in result)) {
       result[key] = new Array();
     }
     result[key].push(element);
  }
  return result;
}
