// Update courses

// Usage:
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
// eg: mongo localhost:27017/coco scripts/mongodb/updateCourses.js

// NOTE: Do not use this to create new courses

// TODO: Replace this script with the course editor

load('bower_components/lodash/dist/lodash.js');

var courses =
[
  {
    _id: ObjectId('560f1a9f22961295f9427742'),
    name: "Introduction to Computer Science",
    slug: "introduction-to-computer-science",
    campaignID: ObjectId("55b29efd1cd6abe8ce07db0d"),
    description: "Learn basic syntax, while loops, and the CodeCombat environment.",
    duration: NumberInt(1),
    free: true,
    screenshot: "/images/pages/courses/101_info.png",
    releasePhase: 'released'
  },
  {
    _id: ObjectId('5632661322961295f9428638'),
    name: "Computer Science 2",
    slug: "computer-science-2",
    campaignID: ObjectId("562f88e84df18473073c74e2"),
    description: "Introduces arguments, variables, if statements, and arithmetic.",
    duration: NumberInt(5),
    free: false,
    screenshot: "/images/pages/courses/102_info.png",
    releasePhase: 'released'
  },
  {
    _id: ObjectId('5789587aad86a6efb573701e'),
    name: "Game Development 1",
    slug: "game-development-1",
    campaignID: ObjectId("5789236960deed1f00ec2ab8"),
    description: "Learn to create your own games which you can share with your friends.",
    duration: NumberInt(1),
    free: false,
    releasePhase: 'released'
  },
  {
    _id: ObjectId('5789587aad86a6efb573701f'),
    name: "Web Development 1",
    slug: "web-development-1",
    campaignID: ObjectId("578913f2c8871ac2326fa3e4"),
    description: "Learn the basics of web development in this introductory HTML & CSS course.",
    duration: NumberInt(1),
    free: false,
    releasePhase: 'released'
  },
  {
    _id: ObjectId('56462f935afde0c6fd30fc8c'),
    name: "Computer Science 3",
    slug: "computer-science-3",
    campaignID: ObjectId("56462ac4410c528505e1160a"),
    description: "Introduces arithmetic, counters, advanced while loops, break, continue, arrays.",
    duration: NumberInt(5),
    free: false,
    screenshot: "/images/pages/courses/103_info.png",
    releasePhase: 'released'
  },
  {
    _id: ObjectId('57b621e7ad86a6efb5737e64'),
    name: "Game Development 2",
    slug: "game-development-2",
    campaignID: ObjectId("57b49c866430272000100c4d"),
    description: "Learn more advanced game development.",
    duration: NumberInt(2),
    free: false,
    releasePhase: 'released'
  },
  {
    _id: ObjectId('5789587aad86a6efb5737020'),
    name: "Web Development 2",
    slug: "web-development-2",
    campaignID: ObjectId("57891570c8871ac2326fa3f8"),
    description: "Learn more advanced web development, including scripting to make interactive webpages.",
    duration: NumberInt(2),
    free: false,
    releasePhase: 'released'
  },
  {
    _id: ObjectId('56462f935afde0c6fd30fc8d'),
    name: "Computer Science 4",
    slug: "computer-science-4",
    campaignID: ObjectId("56462c1133f1478605ebd018"),
    description: "Introduces object literals, for loops, function definitions, drawing, and modulo.",
    duration: NumberInt(5),
    free: false,
    screenshot: "/images/pages/courses/104_info.png",
    releasePhase: 'released'
  },
  {
    _id: ObjectId('569ed916efa72b0ced971447'),
    name: "Computer Science 5",
    slug: "computer-science-5",
    campaignID: ObjectId("568ad069a6584820004437f2"),
    description: "Introduces function parameters, function return values and algorithms.",
    duration: NumberInt(5),
    free: false,
    screenshot: "/images/pages/courses/105_info.png",
    releasePhase: 'released'
  },
  {
    _id: ObjectId('57a0dea5ad86a6efb57375c2'),
    name: "JS Primer",
    slug: "js-primer",
    campaignID: ObjectId("579a5f37843ad12000e6d4c7"),
    description: "Learn JavaScript after you already know another programming language like Python.",
    duration: NumberInt(1),
    free: false,
    releasePhase: 'beta'
  }
];

_.forEach(courses, function(course) {
  // Find course concepts
  var concepts = {};
  var cursor = db.campaigns.find({_id: course.campaignID}, {'levels': 1});
  if (cursor.hasNext()) {
    var doc = cursor.next();
    for (var levelID in doc.levels) {
      for (var j = 0; j < (doc.levels[levelID].concepts || []).length; j++) {
        concepts[doc.levels[levelID].concepts[j]] = true;
      }
    }
  }
  course.concepts = Object.keys(concepts);
});

print("Updating courses..");
for (var i = 0; i < courses.length; i++) {
  var result = db.courses.update({_id: courses[i]._id}, {$set: courses[i]});
  if (result.nMatched !== 1) {
    print("Failed to update " + courses[i].slug);
    print(JSON.stringify(result, null, 2));
  }
}

print("Upserting i18n", db.courses.update(
  {i18n: {$exists: false}}, 
  {$set: {i18n: {'-':{'-':'-'}}, i18nCoverage: []}},
  {multi: true}
));

print("Done.");