// Add externally purchased subscriptions

// Usage:
// Edit hard coded data below.
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>

// Skips duplicate payments, but this might be incorrect depending on the scenario

// TODO: output emails not found

var emails = ['pam@fred.com', 'Bob@fred.com'];
var purchaserID = '54ed0ac0ca7f1c421c025b3d';
var endDate = '2015-06-01';
var gems = 10500;
var amount = 1750;
var service = 'external';

emails = emails.map(function(e) { return e.toLowerCase();});

log("Input Data");
log("service\t" + service);
log("purchaserID\t" + purchaserID);
log("end date\t" + endDate);
log("gems\t" + gems);
log("amount\t" + amount);
log("emails");
log(emails);

// 1. Set free = endDate, updated purchased.gems

db.users.update(
  {emailLower: {$in: emails}, "stripe.free": {$ne: endDate}},
  {
    $set: {
      "stripe.free": endDate
    },
    $inc: {
      "purchased.gems": gems
    }
  },
  {
    multi: true
  }
);

// 2. create Payment objects

var cursor = db.users.find({emailLower: {$in: emails}});
while (cursor.hasNext()) {
  var doc = cursor.next();

  var criteria = {
    purchaser: ObjectId(purchaserID),
    recipient: doc._id,
    service: service,
    gems: gems,
    amount: amount
  }
  if (db.payments.findOne(criteria)) {
      log("Already have a payment for " + doc.email);
  }
  else {
    db.payments.insert(criteria);
    log("Added payment for " + doc.email);
  }
}

function log(str) {
  print(new Date().toISOString() + " " + str);
}