/*
 * @flow
 */

import INTERNALS from './internals';
import type ModuleBase from './ModuleBase';

const NATIVE_LOGGERS: { [string]: Object } = {};

const getModuleKey = (module: ModuleBase): string =>
  `${module.app.name}:${module.namespace}`;

export const getLogger = (module: ModuleBase) => {
  const key = getModuleKey(module);
  return NATIVE_LOGGERS[key];
};

export const LEVELS = {
  debug: 0,
  info: 1,
  warn: 2,
  error: 3,
};

export const initialiseLogger = (module: ModuleBase, logNamespace: string) => {
  const key = getModuleKey(module);
  if (!NATIVE_LOGGERS[key]) {
    const prefix = `🔥 ${logNamespace.toUpperCase()}`;
    NATIVE_LOGGERS[key] = {
      debug(...args) {
        if (__DEV__ && LEVELS.debug >= LEVELS[INTERNALS.OPTIONS.logLevel])
          console.log(...[prefix, ...args]);
      },
      info(...args) {
        if (__DEV__ && LEVELS.info >= LEVELS[INTERNALS.OPTIONS.logLevel])
          console.log(...[prefix, ...args]);
      },
      warn(...args) {
        if (__DEV__ && LEVELS.warn >= LEVELS[INTERNALS.OPTIONS.logLevel])
          console.warn(...args);
      },
      error(...args) {
        console.error(...args);
      },
    };
  }
};
