'use strict'

const fs = require('fs')
const cluster = require('cluster')

exports['default'] = {
  logger: (api) => {
    let logger = {transports: []}

    // console logger
    if (cluster.isMaster) {
      logger.transports.push(function (api, winston) {
        return new (winston.transports.Console)({
          colorize: true,
          level: 'info',
          timestamp: function () { return api.id + ' @ ' + new Date().toISOString() }
        })
      })
    }

    // file logger
    logger.transports.push(function (api, winston) {
      if (api.config.general.paths.log.length === 1) {
        const logDirectory = api.config.general.paths.log[0]
        try {
          fs.mkdirSync(logDirectory)
        } catch (e) {
          if (e.code !== 'EEXIST') {
            throw (new Error('Cannot create log directory @ ' + logDirectory))
          }
        }
      }

      return new (winston.transports.File)({
        filename: api.config.general.paths.log[0] + '/' + api.pids.title + '.log',
        level: 'info',
        timestamp: function () { return api.id + ' @ ' + new Date().toISOString() }
      })
    })

    // the maximum length of param to log (we will truncate)
    logger.maxLogStringLength = 100

    // you can optionally set custom log levels
    // logger.levels = {good: 0, bad: 1};

    // you can optionally set custom log colors
    // logger.colors = {good: 'blue', bad: 'red'};

    return logger
  }
}

exports.test = {
  logger: (api) => {
    return {
      transports: null
    }
  }
}