import xhrInterceptors from './xhrInterceptors.json5';

export {xhrInterceptors};

export function matchInterceptors(interceptFilter, url) {
  return xhrInterceptors.interceptors.filter(interceptor => {
    var regex = new RegExp(interceptor.urlRegex);
    return interceptor.intercepts == interceptFilter && regex.test(url);
  });
}

export function getResponseJSON(xhr) {
  if (xhr.responseType === 'arraybuffer') {
    var arrBuffer = xhr.response;
    if (!arrBuffer) {
      console.error('No array buffer.');
      return undefined;
    }
    var byteArray = new Uint8Array(arrBuffer);
    var dec = new TextDecoder('utf-8');
    var rawResponse = dec.decode(byteArray);
    return JSON.parse(rawResponse);
  }
  if (xhr.responseType === 'text' || xhr.responseType === '')
    return JSON.parse(xhr.responseText);
  if (xhr.responseType === 'json') return xhr.response;

  console.error(
      'Unexpected responseType ' + xhr.responseType + '. Request url: ',
      xhr.$TWPTRequestURL);
  return undefined;
}

export function triggerEvent(eventName, body) {
  var evt = new CustomEvent('TWPT_' + eventName, {
    detail: {
      body,
    }
  });
  window.dispatchEvent(evt);
}
