// 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.

module.exports = Table;

// Table represents a collection of Rows.
function Table(fullName, name) {
  if (!(this instanceof Table)) {
    return new Table(fullName, name);
  }

  /**
   * The relative name of this Table.
   * @property name
   * @type {string}
   */
  Object.defineProperty(this, 'name', {
    value: name,
    writable: false
  });

  /**
   * The full name (object name) of this Table.
   * @property fullName
   * @type {string}
   */
  Object.defineProperty(this, 'fullName', {
    value: fullName,
    writable: false
  });
}

// Row returns the Row with the given primary key.
Table.prototype.row = function(key) {};

// Get stores the value for the given primary key in value. If value's type
// does not match the stored type, Get will return an error. Expected usage:
Table.prototype.get = function(ctx, key, value) {};

// Put writes the given value to this Table. The value's primary key field
// must be set.
Table.prototype.put = function(ctx, key, value) {};

// Delete deletes all rows in the given range. If the last row that is covered
// by a prefix from SetPermissions is deleted, that (prefix, perms) pair is
// removed.
Table.prototype.delete = function(ctx, range) {};

// Scan returns all rows in the given range. The returned stream reads from a
// consistent snapshot taken at the time of the Scan RPC.
Table.prototype.scan = function(ctx, range) {};

// SetPermissions sets the permissions for all current and future rows with
// the given prefix. If the prefix overlaps with an existing prefix, the
// longest prefix that matches a row applies. For example:
//     SetPermissions(ctx, Prefix("a/b"), perms1)
//     SetPermissions(ctx, Prefix("a/b/c"), perms2)
// The permissions for row "a/b/1" are perms1, and the permissions for row
// "a/b/c/1" are perms2.
//
// SetPermissions will fail if called with a prefix that does not match any
// rows.
Table.prototype.setPermissions = function(ctx, prefix, perms) {};

// GetPermissions returns an array of (prefix, perms) pairs. The array is
// sorted from longest prefix to shortest, so element zero is the one that
// applies to the row with the given key. The last element is always the
// prefix "" which represents the table's permissions -- the array will always
// have at least one element.
Table.prototype.getPermissions = function(ctx, key) {};

// DeletePermissions deletes the permissions for the specified prefix. Any
// rows covered by this prefix will use the next longest prefix's permissions.
Table.prototype.deletePermissions = function(ctx, prefix) {};