import $ from 'jquery';

export default function createAjaxRequest() {
  return function(ajaxOptions) {
    const requestXHR = new window.XMLHttpRequest();
    let aborted = false;
    let complete = false;

    function abortRequest() {
      if (!complete) {
        aborted = true;
        requestXHR.abort();
      }
    }

    const request = $.ajax({
      xhr: () => requestXHR,
      ...ajaxOptions
    }).then(null, (xhr, textStatus, errorThrown) => {
      xhr.aborted = aborted;

      return $.Deferred().reject(xhr, textStatus, errorThrown).promise();
    }).always(() => {
      complete = true;
    });

    return {
      request,
      abortRequest
    };
  };
}
