(function () {
  "use strict";

  var BAD_HOST = ["HOST", "EXAMPLE"].join("-");
  var DEFAULT_HOST = "SHARKON2025";

  function decode(value) {
    try {
      return decodeURIComponent(value);
    } catch (error) {
      return value;
    }
  }

  function hostFromHash() {
    var hash = window.location.hash || "";
    var match = hash.match(/#?\/activity\/([^/]+)/i) || hash.match(/#?\/trends\/([^/?#]+)/i);
    var host = match && match[1] ? decode(match[1]) : "";
    if (host && host !== BAD_HOST && host !== "unknown" && host !== "undefined") return host;
    return DEFAULT_HOST;
  }

  function rewriteText(value) {
    if (typeof value !== "string" || value.indexOf(BAD_HOST) === -1) return value;
    return value.split(BAD_HOST).join(hostFromHash());
  }

  function sanitizeStorage(storage) {
    if (!storage) return;
    try {
      for (var i = 0; i < storage.length; i += 1) {
        var key = storage.key(i);
        if (!key) continue;
        var value = storage.getItem(key);
        var next = rewriteText(value);
        if (next !== value) storage.setItem(key, next);
      }
      if (storage.landingpage && storage.landingpage.indexOf(BAD_HOST) !== -1) {
        storage.landingpage = "/activity/" + hostFromHash() + "/view/";
      }
    } catch (error) {
    }
  }

  function sanitizeRoute() {
    var hash = window.location.hash || "";
    var next = rewriteText(hash);
    if (next !== hash) window.location.replace(next);
  }

  sanitizeStorage(window.localStorage);
  sanitizeStorage(window.sessionStorage);
  sanitizeRoute();

  var originalFetch = window.fetch;
  if (typeof originalFetch === "function" && !originalFetch.__awHostSanitizePatched) {
    var patchedFetch = function (input, init) {
      var nextInput = input;
      var nextInit = init;
      try {
        if (typeof nextInput === "string") {
          nextInput = rewriteText(nextInput);
        } else if (nextInput && typeof nextInput.url === "string") {
          var nextUrl = rewriteText(nextInput.url);
          if (nextUrl !== nextInput.url && typeof Request === "function") {
            nextInput = new Request(nextUrl, nextInput);
          }
        }
        if (nextInit && typeof nextInit.body === "string") {
          nextInit = Object.assign({}, nextInit, { body: rewriteText(nextInit.body) });
        }
      } catch (error) {
      }
      return originalFetch.call(this, nextInput, nextInit);
    };
    patchedFetch.__awHostSanitizePatched = true;
    window.fetch = patchedFetch;
  }

  if (window.XMLHttpRequest && window.XMLHttpRequest.prototype && !window.XMLHttpRequest.prototype.__awHostSanitizePatched) {
    var proto = window.XMLHttpRequest.prototype;
    var originalOpen = proto.open;
    var originalSend = proto.send;
    proto.open = function (method, url) {
      if (typeof url === "string") arguments[1] = rewriteText(url);
      return originalOpen.apply(this, arguments);
    };
    proto.send = function (body) {
      if (typeof body === "string") body = rewriteText(body);
      return originalSend.call(this, body);
    };
    proto.__awHostSanitizePatched = true;
  }
})();
