import { LogLevels, isLogLevelString } from './index';
import SplitIO from '../../types/splitio';
import { ILogger } from './types';
import { ERROR_LOGLEVEL_INVALID } from './constants';

/**
 * The public Logger utility API exposed via SplitFactory, used to update the log level.
 *
 * @param log - the factory logger instance to handle
 */
export function createLoggerAPI(log: ILogger): SplitIO.ILoggerAPI {

  function setLogLevel(logLevel: string) {
    if (isLogLevelString(logLevel)) {
      log.setLogLevel(logLevel);
    } else {
      log.error(ERROR_LOGLEVEL_INVALID);
    }
  }

  return {
    /**
     * Enables all the logs.
     */
    enable() {
      setLogLevel(LogLevels.DEBUG);
    },
    /**
     * Sets a custom log Level for the SDK.
     * @param logLevel - Custom LogLevel value.
     */
    setLogLevel,
    /**
     * Sets a custom logger for the SDK logs.
     * @param logger - Custom logger.
     */
    setLogger(logger?: ILogger) {
      log.setLogger(logger);
    },
    /**
     * Disables all the log levels.
     */
    disable() {
      // Disabling is equal logLevel none
      setLogLevel(LogLevels.NONE);
    },
    /**
     * Exposed for usage with setLogLevel
     */
    LogLevel: LogLevels
  };

}
