// 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 defineClass = require('./util/define-class');

var InvitationManager = defineClass({
  publics: {
    invite: function(username) {
    }
  },

  privates: {
    /**
     * TODO(rosswang): this is a very short term hack just because user mount
     * names on ns.dev.v.io don't yet default to Resolve in [...].
     */
    advertise: function() {
      return this.prereqs.then(function(prereqs) {
        var mountNames = prereqs.mountNames;
        var vanadiumWrapper = prereqs.vanadiumWrapper;
        return vanadiumWrapper.getPermissions(mountNames.user)
          .then(function(results) {
            var perms = results[0];
            perms.set('Resolve', {in: ['...']});
            return vanadiumWrapper.setPermissions(mountNames.user, perms);
          });
      });
    }
  },

  events: {
    onError: 'memory'
  },

  /**
   * @param prereqs promise of { mountNames, vanadiumWrapper }
   */
  init: function(prereqs, groupManagerPromise) {
    this.prereqs = prereqs;

    this.groupManagerPromise = groupManagerPromise;

    this.createInvitationsSg = groupManagerPromise.then(function(gm) {
      return gm.createSyncGroup('invitations', ['invitations']);
    });

    this.advertise().catch(this.onError);
  }
});

module.exports = InvitationManager;