/* eslint-disable guard-for-in */
/* eslint-disable no-restricted-syntax */
/* eslint-disable no-var */
/* eslint-disable vars-on-top */
import path from 'path';
import { MongoMemoryReplSet } from 'mongodb-memory-server-core';

declare global {
  var mongodb: MongoMemoryReplSet;
}

const EnvVars: { [key: string]: string } = Object.freeze({
  JWT_KEY: 'testsecret',
  JWT_EXPIRES_IN: '1d',
  JWT_MAIL_TOKEN_EXPIRATION: '30min',
  NOTIFICATION_SERVICE_URL: 'http://localhost:5030',
});

const mongoBinPath = path.resolve(
  __dirname,
  path.join('..', '.mongodb-memory-server', 'bin'),
);

export default async () => {
  const mongo = new MongoMemoryReplSet({
    replSet: { storageEngine: 'wiredTiger' },
    binary: { downloadDir: mongoBinPath },
  });
  await mongo.waitUntilRunning();

  global.mongodb = mongo;
  process.env.MONGO_URL = await mongo.getUri();

  for (const key in EnvVars) {
    process.env[key] = EnvVars[key];
  }
};
