import * as _ from 'lodash';

const funcs = ['error', 'warn', 'info', 'verbose', 'debug', 'silly'];

/**
 *
 * @param prefix - to add to the first argument.
 */
export default function winstonMock(prefix: string) {
  let allowedLevel: number;

  const logger: any = {};

  const userStrLevel = process.env.LOG_LEVEL;

  if (userStrLevel) {
    allowedLevel = funcs.indexOf(userStrLevel);
    if (allowedLevel === -1) {
      throw new Error('Incorrect LOG_LEVEL env var.');
    }
  } else {
    allowedLevel = funcs.length;
  }

  for (let curLevel = 0; curLevel < funcs.length; curLevel++) {
    const func = funcs[curLevel];

    logger[func] = (...args: any) => {
      const localArgs = _.cloneDeep(args);
      if (curLevel <= allowedLevel && localArgs) {
        localArgs[0] = prefix + `${func}: ` + localArgs[0];
        for (const str of localArgs) {
          if (typeof str === 'string') {
            gT.l.println(str);
          } else {
            gT.l.println(gIn.textUtils.valToStr(str));
          }
        }
      }
    };
  }

  return logger;
}
