(() => {
  const http = require("http");
  const { Readable } = require("stream");

  const originalAddRequest = http.Agent.prototype.addRequest;
  const originalWrite = http.ClientRequest.prototype.write;
  const originalEnd = http.ClientRequest.prototype.end;

  function createEmptyResponse() {
    const res = new Readable({
      read() {
        this.push("");
        this.push(null);
      }
    });

    res.statusCode = 200;
    res.statusMessage = "OK";
    res.headers = {};
    res.rawHeaders = [];

    return res;
  }

  http.Agent.prototype.addRequest = function (req) {
    req.__mockedHttpRequest = true;
  };

  http.ClientRequest.prototype.write = function () {
    if (this.__mockedHttpRequest) {
      return true;
    }

    return originalWrite.apply(this, arguments);
  };

  http.ClientRequest.prototype.end = function () {
    if (!this.__mockedHttpRequest) {
      return originalEnd.apply(this, arguments);
    }

    const req = this;
    const res = createEmptyResponse();

    process.nextTick(() => {
      req.emit("response", res);
      req.emit("close");
    });

    return req;
  };

  http.__restorePrototype = function () {
    http.Agent.prototype.addRequest = originalAddRequest;
    http.ClientRequest.prototype.write = originalWrite;
    http.ClientRequest.prototype.end = originalEnd;
    delete http.__restorePrototype;
  };
})();