const Settings = require('settings-sharelatex')
const mongojs = require('mongojs')
const db = mongojs(Settings.mongo.url, ['users'])
const async = require('async')

const handleExit = () => console.log('Got signal.  Shutting down.')
process.on('SIGINT', handleExit)
process.on('SIGHUP', handleExit)

const initUserEmailsAttribute = (user, callback) => {
  const update = {
    $set: {
      emails: [
        {
          email: user.email,
          createdAt: new Date()
        }
      ]
    }
  }
  db.users.update({ _id: user._id }, update, callback)
}

const updateAllUsersEmailsAttribute = (users, callback) => {
  console.log(`updating ${users.length} users`)
  async.eachSeries(users, initUserEmailsAttribute, callback)
}

exports.migrate = (client, done) =>
  db.users.find(
    { emails: { $exists: false } },
    { email: 1 },
    (error, users) => {
      if (error) {
        callback(error)
      } else {
        updateAllUsersEmailsAttribute(users, done)
      }
    }
  )

exports.rollback = (client, done) => {
  const update = {
    $unset: {
      emails: 1
    }
  }
  db.users.update({ emails: { $exists: true } }, update, done)
}