/**
 * @license
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/** @polymerBehavior Gerrit.AccessBehavior */
export const AccessBehavior = {
  properties: {
    permissionValues: {
      type: Object,
      readOnly: true,
      value: {
        abandon: {
          id: 'abandon',
          name: 'Abandon',
        },
        addPatchSet: {
          id: 'addPatchSet',
          name: 'Add Patch Set',
        },
        create: {
          id: 'create',
          name: 'Create Reference',
        },
        createTag: {
          id: 'createTag',
          name: 'Create Annotated Tag',
        },
        createSignedTag: {
          id: 'createSignedTag',
          name: 'Create Signed Tag',
        },
        delete: {
          id: 'delete',
          name: 'Delete Reference',
        },
        deleteChanges: {
          id: 'deleteChanges',
          name: 'Delete Changes',
        },
        deleteOwnChanges: {
          id: 'deleteOwnChanges',
          name: 'Delete Own Changes',
        },
        editAssignee: {
          id: 'editAssignee',
          name: 'Edit Assignee',
        },
        editHashtags: {
          id: 'editHashtags',
          name: 'Edit Hashtags',
        },
        editTopicName: {
          id: 'editTopicName',
          name: 'Edit Topic Name',
        },
        forgeAuthor: {
          id: 'forgeAuthor',
          name: 'Forge Author Identity',
        },
        forgeCommitter: {
          id: 'forgeCommitter',
          name: 'Forge Committer Identity',
        },
        forgeServerAsCommitter: {
          id: 'forgeServerAsCommitter',
          name: 'Forge Server Identity',
        },
        owner: {
          id: 'owner',
          name: 'Owner',
        },
        publishDrafts: {
          id: 'publishDrafts',
          name: 'Publish Drafts',
        },
        push: {
          id: 'push',
          name: 'Push',
        },
        pushMerge: {
          id: 'pushMerge',
          name: 'Push Merge Commit',
        },
        read: {
          id: 'read',
          name: 'Read',
        },
        rebase: {
          id: 'rebase',
          name: 'Rebase',
        },
        removeReviewer: {
          id: 'removeReviewer',
          name: 'Remove Reviewer',
        },
        submit: {
          id: 'submit',
          name: 'Submit',
        },
        submitAs: {
          id: 'submitAs',
          name: 'Submit (On Behalf Of)',
        },
        toggleWipState: {
          id: 'toggleWipState',
          name: 'Toggle Work In Progress State',
        },
        viewPrivateChanges: {
          id: 'viewPrivateChanges',
          name: 'View Private Changes',
        },
      },
    },
  },

  /**
   * @param {!Object} obj
   * @return {!Array} returns a sorted array sorted by the id of the original
   *    object.
   */
  toSortedArray(obj) {
    if (!obj) { return []; }
    return Object.keys(obj)
        .map(key => {
          return {
            id: key,
            value: obj[key],
          };
        })
        .sort((a, b) =>
          // Since IDs are strings, use localeCompare.
          a.id.localeCompare(b.id)
        );
  },
};

// TODO(dmfilippov) Remove the following lines with assignments
// Plugins can use the behavior because it was accessible with
// the global Gerrit... variable. To avoid breaking changes in plugins
// temporary assign global variables.
window.Gerrit = window.Gerrit || {};
window.Gerrit.AccessBehavior = AccessBehavior;
