load('bower_components/lodash/dist/lodash.js');
load('bower_components/underscore.string/dist/underscore.string.min.js');
load('bower_components/tv4/tv4.js');
load('bower_components/treema/treema-utils.js');

print(db.level.components.count());

// This script can be modified later to also remove the old defaults in these components and systems.

migrateDefault = function (doc) {
  thisTv4 = tv4.freshApi();
  thisTv4.addSchema('#', doc.configSchema || {});
  var data = TreemaUtils.cloneDeep(doc.configSchema.default) || {};
  TreemaUtils.populateRequireds(data, doc.configSchema);
  var props = doc.configSchema.properties;
  if(props) {
    _.keys(doc.configSchema.properties).forEach(function (key) {
      if(data[key]) return;
      var childSchema = props[key];
      var workingSchema = TreemaUtils.buildWorkingSchemas(childSchema, thisTv4)[0];
      if(workingSchema.default)
        return data[key] = TreemaUtils.cloneDeep(workingSchema.default);
      var type = props[key].type;
      if(!type) return;
      if(Array.isArray(type)) type = type[0];
      data[key] = TreemaUtils.defaultForType(type);
    })
  }
  delete doc.configSchema.required;
  doc.configSchema.default = data;
//  print('\n\n--------------------', doc.name);
//  print("SCHEMA: ", JSON.stringify(doc.configSchema, null, '\t'));
  if(doc.system) {
    print('saving component', doc.name);
    db.level.components.save(doc);
  }
  else {
    print('saving system', doc.name);
    db.level.systems.save(doc);
  }
};

db.level.components.find({slug: {$exists: true}}).forEach(migrateDefault);
db.level.systems.find({slug: {$exists: true}}).forEach(migrateDefault);