'use strict'

const winston = require('winston')

module.exports = (isDebug) => {
  if (typeof PROCNAME === 'undefined') {
    const PROCNAME = 'SERVER' // eslint-disable-line no-unused-vars
  }

  // Console + File Logs

  winston.remove(winston.transports.Console)
  winston.add(winston.transports.Console, {
    level: (isDebug) ? 'debug' : 'info',
    prettyPrint: true,
    colorize: true,
    silent: false,
    timestamp: true,
    filters: [(level, msg, meta) => {
      return '[' + PROCNAME + '] ' + msg // eslint-disable-line no-undef
    }]
  })

  // External services

  if (appconfig.externalLogging.bugsnag) {
    const bugsnagTransport = require('./winston-transports/bugsnag')
    winston.add(bugsnagTransport, {
      level: 'warn',
      key: appconfig.externalLogging.bugsnag
    })
  }

  if (appconfig.externalLogging.loggly) {
    require('winston-loggly-bulk')
    winston.add(winston.transports.Loggly, {
      token: appconfig.externalLogging.loggly.token,
      subdomain: appconfig.externalLogging.loggly.subdomain,
      tags: ['wiki-js'],
      level: 'warn',
      json: true
    })
  }

  if (appconfig.externalLogging.papertrail) {
    require('winston-papertrail').Papertrail // eslint-disable-line no-unused-expressions
    winston.add(winston.transports.Papertrail, {
      host: appconfig.externalLogging.papertrail.host,
      port: appconfig.externalLogging.papertrail.port,
      level: 'warn',
      program: 'wiki.js'
    })
  }

  if (appconfig.externalLogging.rollbar) {
    const rollbarTransport = require('./winston-transports/rollbar')
    winston.add(rollbarTransport, {
      level: 'warn',
      key: appconfig.externalLogging.rollbar
    })
  }

  if (appconfig.externalLogging.sentry) {
    const sentryTransport = require('./winston-transports/sentry')
    winston.add(sentryTransport, {
      level: 'warn',
      key: appconfig.externalLogging.sentry
    })
  }

  return winston
}