const {db} = require('../app/js/infrastructure/mongojs')
const FeaturesUpdater = require(
  '../app/js/Features/Subscription/FeaturesUpdater'
)
const V1SubscriptionManager = require(
  '../app/js/Features/Subscription/V1SubscriptionManager'
)
const async = require('async')
const logger = require('logger-sharelatex')
logger.logger.level('error')

const areFeaturesEqual = function(featuresA, featuresB) {
  for (const feature in featuresA) {
    if (featuresA[feature] !== featuresB[feature]) {
      return false
    }
  }
  return true
}

var outOfSyncUserCount = 0
var userCount = null

db.users.find({
  'overleaf.id': { $exists: true }
}, {
  overleaf: 1,
  features: 1
}, function (error, users) {
  if (error) throw error
  console.log('USER COUNT', userCount = users.length)
  async.mapSeries(users, function (user, callback) {
    console.log('REFRESHING IN v2', user._id)
    FeaturesUpdater.refreshFeatures(user._id, false, function (error) {
      if (error) console.error('ERROR', error)
      console.log('REFRESHING IN v1', user._id)
      V1SubscriptionManager.notifyV1OfFeaturesChange(
        user._id,
        function (error) {
          if (error) console.error('ERROR', error)
          db.users.find({
            _id: user._id
          }, {
            features: 1
          }, function (error, [updatedUser]) {
            if (error) throw error
            if (areFeaturesEqual(user.features, updatedUser.features)) {
              console.log('UNCHANGED', user._id)
            } else {
              console.log('MODIFIED', user._id)
              outOfSyncUserCount = outOfSyncUserCount + 1
            }
            callback()
          })
        }
      )
    })
  }, function (error) {
    if (error) throw error
    console.log('FINISHED!')
    console.log('OUT OF SYNC USERS', outOfSyncUserCount, '/', userCount)
    process.exit()
  })
})

const {db} = require('../app/js/infrastructure/mongojs')
const FeaturesUpdater = require(
  '../app/js/Features/Subscription/FeaturesUpdater'
)
const V1SubscriptionManager = require(
  '../app/js/Features/Subscription/V1SubscriptionManager'
)
const async = require('async')
const logger = require('logger-sharelatex')
logger.logger.level('error')

const areFeaturesEqual = function (featuresA, featuresB) {
  for (const feature in featuresA) {
    if (featuresA[feature] !== featuresB[feature]) {
      return false
    }
  }
  return true
}

var outOfSyncUserCount = 0
var userCount = null

db.users.find({
  'overleaf.id': { $exists: true }
}, {
  overleaf: 1,
  features: 1
}, function (error, users) {
  if (error) throw error
  console.log('USER COUNT', userCount = users.length)
  async.mapSeries(users, function (user, callback) {
    console.log('REFRESHING IN v2', user._id)
    FeaturesUpdater.refreshFeatures(user._id, false, function (error) {
      if (error) console.error('ERROR', error)
      console.log('REFRESHING IN v1', user._id)
      V1SubscriptionManager.notifyV1OfFeaturesChange(
        user._id,
        function (error) {
          if (error) console.error('ERROR', error)
          db.users.find({
            _id: user._id
          }, {
            features: 1
          }, function (error, [updatedUser]) {
            if (error) throw error
            if (areFeaturesEqual(user.features, updatedUser.features)) {
              console.log('UNCHANGED', user._id)
            } else {
              console.log('MODIFIED', user._id)
              outOfSyncUserCount = outOfSyncUserCount + 1
            }
            callback()
          })
        }
      )
    })
  }, function (error) {
    if (error) throw error
    console.log('FINISHED!')
    console.log('OUT OF SYNC USERS', outOfSyncUserCount, '/', userCount)
    process.exit()
  })
})

fix linting