// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

var vanadium = require('vanadium');

var defineClass = require('./util/define-class');

var GroupManager = defineClass({
  publics: {
    createSyncGroup: function(name, prefixes) {
      var self = this;

      return this.prereq.then(function() {
        var sg = self.syncbaseWrapper.syncGroup(self.sgAdmin, name);

        var spec = sg.buildSpec(
          prefixes,
          [self.name('sgmt', name)]
        );

        /* TODO(rosswang): Right now, duplicate SyncBase creates on
         * different SyncBase instances results in siloed SyncGroups.
         * Revisit this logic once it merges properly. */
        return sg.joinOrCreate(spec);
      });
    }
  },

  init: function(vanadiumWrapper, syncbaseWrapper, mountNames) {
    this.syncbaseWrapper = syncbaseWrapper;

    this.name = function() {
      var parts = [mountNames.app];
      Array.prototype.push.apply(parts, arguments);
      return vanadium.naming.join(parts);
    };

    this.sgAdmin = this.name('sgadmin');

    /* TODO(rosswang): Once Vanadium supports global sync-group admin
     * creation, remove this. For now, use the first local SyncBase
     * instance to administrate. */
    this.prereq = vanadiumWrapper.mount(this.sgAdmin, syncbaseWrapper.mountName,
      vanadiumWrapper.multiMount.FAIL);
  }
});

module.exports = GroupManager;