// gemPromptGroup A/B Results

// Usage:
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>

// Inputs to modify below:
// numDays - number of days into the past to fetch
// eventFunnel - ordered array of events that define the completion funnel
// levelSlugs - [optional] array of levels to examine, otherwise fetch all levels
// testGroupFn - return group value from user testGroupNumber

// Include getFunnelData(), log()
load('abTestHelpers.js');

var scriptStartTime = new Date();
try {
  var numDays = 30;

  var startDay = new Date();
  today = startDay.toISOString().substr(0, 10);
  startDay.setUTCDate(startDay.getUTCDate() - numDays);
  startDay = startDay.toISOString().substr(0, 10);
  log("Today is " + today);
  log("Start day is " + startDay);

  var eventFunnel = ['Started purchase', 'Finished gem purchase'];

  // getGemPromptGroup
  var testGroupFn = function (testGroupNumber) {
    var group = testGroupNumber % 8
    return group >= 0 && group <= 3 ? 'prompt' : 'no-prompt';
  }

  var funnelData = getFunnelData(startDay, eventFunnel, testGroupFn);

  log("Day\t\tGroup\t\tStarted\tFinsihed\tCompletion Rate");
  var overallCounts = {};
  for (var i = 0; i < funnelData.length; i++) {
    var day = funnelData[i].day;
    var group = funnelData[i].group;
    var started = funnelData[i].started;
    var finished = funnelData[i].finished;
    var rate = started > 0 ? finished / started * 100 : 0.0;

    if (!overallCounts[level]) overallCounts[level] = {};
    if (!overallCounts[level][group]) overallCounts[level][group] = {started: 0, finished: 0};
    overallCounts[level][group]['started'] += started;
    overallCounts[level][group]['finished'] += finished;

    if (group === 'prompt') {
      log(day + "\t" + group + "\t\t" + started + "\t" + finished + "\t" + rate.toFixed(2));
    }
    else {
      log(day + "\t" + group + "\t" + started + "\t" + finished + "\t" + rate.toFixed(2));
    }
  }

  log("Overall totals:");
  for (level in overallCounts) {
    for (group in overallCounts[level]) {
      var started = overallCounts[level][group].started;
      var finished = overallCounts[level][group].finished;
      var rate = started > 0 ? finished / started * 100 : 0.0;
      if (group === 'prompt') {
        log(group + "\t\t" + started + "\t" + finished + "\t" + rate.toFixed(2));
      }
      else {
        log(group + "\t" + started + "\t" + finished + "\t" + rate.toFixed(2));
      }
    }
  }
}
catch(err) {
  log("ERROR: " + err);
  printjson(err);
}
finally {
  log("Script runtime: " + (new Date() - scriptStartTime));
}