const fs = require('fs')
const handlebars = require('handlebars')
const querystring = require('querystring')
const Email = require('@pubsweet/component-send-email')
const config = require('config')

const resetUrl = config.get('invite-reset-password.url')

module.exports = {
  setupInviteEmail: async (email, emailType, token, comment = '') => {
    let subject
    const htmlFile = readFile(`${__dirname}/templates/${emailType}.html`)
    const textFile = readFile(`${__dirname}/templates/${emailType}.txt`)
    let replacements = {}
    const htmlTemplate = handlebars.compile(htmlFile)
    const textTemplate = handlebars.compile(textFile)

    switch (emailType) {
      case 'invite':
        subject = 'Hindawi Invitation'
        replacements = {
          url: `${resetUrl}?${querystring.encode({
            email,
            token,
          })}`,
        }
        break
      default:
        subject = 'Welcome to Hindawi!'
        break
    }

    const htmlBody = htmlTemplate(replacements)
    const textBody = textTemplate(replacements)

    Email.send(email, subject, textBody, htmlBody)
  },
}

const readFile = path =>
  fs.readFileSync(path, { encoding: 'utf-8' }, (err, file) => {
    if (err) {
      throw err
    } else {
      return file
    }
  })