const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook;
const logger = require('winston');

const config = require('@config/slackConfig');
const {slackWebHook, slackErrorChannel, slackInfoChannel} = config;

function configureSlack () {
  logger.info('configuring slack logger...');
  if (!config) {
    return logger.warn('No slack config found');
  }
  // update slack webhook settings
  if (!slackWebHook) {
    return logger.info('Slack logging is not enabled because no slackWebHook config var provided.');
  }
  // add a transport for errors to slack
  if (slackErrorChannel) {
    logger.add(winstonSlackWebHook, {
      name      : 'slack-errors-transport',
      level     : 'warn',
      webhookUrl: slackWebHook,
      channel   : slackErrorChannel,
      username  : 'spee.ch',
      iconEmoji : ':face_with_head_bandage:',
    });
  } else {
    logger.warn('No slack error channel logging set up');
  }
  // add a transport for info in slack
  if (slackInfoChannel) {
    logger.add(winstonSlackWebHook, {
      name      : 'slack-info-transport',
      level     : 'info',
      webhookUrl: slackWebHook,
      channel   : slackInfoChannel,
      username  : 'spee.ch',
      iconEmoji : ':nerd_face:',
    });
  } else {
    logger.warn('No slack info channel logging set up');
  }
  // send test messages
  logger.info('Slack logging is online.');
}

module.exports = configureSlack;