/**
 * The hard-coded singleton key for webpack-hot-middleware's client instance.
 *
 * [Ref](https://github.com/webpack-contrib/webpack-hot-middleware/blob/cb29abb9dde435a1ac8e9b19f82d7d36b1093198/client.js#L152)
 */
const singletonKey = '__webpack_hot_middleware_reporter__';

/**
 * Initializes a socket server for HMR for webpack-hot-middleware.
 * @param {function(*): void} messageHandler A handler to consume Webpack compilation messages.
 * @returns {void}
 */
function initWHMEventSource(messageHandler) {
  const client = window[singletonKey] || require('webpack-hot-middleware/client');

  client.useCustomOverlay({
    showProblems: function showProblems(type, data) {
      const error = {
        type,
        data,
      };

      messageHandler(error);
    },
    clear: function clear() {
      messageHandler({ type: 'ok' });
    },
  });
}

module.exports = initWHMEventSource;
