import log from 'loglevel';

/**
 * Returns a middleware that logs RPC activity. Logging is detailed in
 * development builds, but more limited in production builds.
 *
 * @param {{ origin: string }} opts - The middleware options
 * @returns {Function}
 */
export default function createLoggerMiddleware(opts) {
  return function loggerMiddleware(
    /** @type {any} */ req,
    /** @type {any} */ res,
    /** @type {Function} */ next,
  ) {
    next((/** @type {Function} */ cb) => {
      if (res.error) {
        log.debug('Error in RPC response:\n', res);
      }
      if (req.isMetamaskInternal) {
        return;
      }
      if (process.env.METAMASK_DEBUG) {
        log.info(`RPC (${opts.origin}):`, req, '->', res);
      } else {
        log.info(
          `RPC (${opts.origin}): ${req.method} -> ${
            res.error ? 'error' : 'success'
          }`,
        );
      }
      cb();
    });
  };
}