<!--
@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.
-->

<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../behaviors/gr-access-behavior/gr-access-behavior.html">
<link rel="import" href="../../../bower_components/paper-toggle-button/paper-toggle-button.html">
<link rel="import" href="../../../styles/gr-form-styles.html">
<link rel="import" href="../../../styles/gr-menu-page-styles.html">
<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../../shared/gr-autocomplete/gr-autocomplete.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../gr-rule-editor/gr-rule-editor.html">

<dom-module id="gr-permission">
  <template>
    <style include="shared-styles">
      :host {
        display: block;
        margin-bottom: .7em;
      }
      .header {
        align-items: baseline;
        display: flex;
        justify-content: space-between;
        margin: .3em .7em;
      }
      .rules {
        background: var(--table-header-background-color);
        border: 1px solid var(--border-color);
        border-bottom: 0;
      }
      .editing .rules {
        border-bottom: 1px solid var(--border-color);
      }
      .title {
        margin-bottom: .3em;
      }
      #addRule,
      #removeBtn {
        display: none;
      }
      .right {
        display: flex;
        align-items: center;
      }
      .editing #removeBtn {
        display: block;
        margin-left: 1.5em;
      }
      .editing #addRule {
        display: block;
        padding: .7em;
      }
      #deletedContainer,
      .deleted #mainContainer {
        display: none;
      }
      .deleted #deletedContainer {
        align-items: baseline;
        border: 1px solid var(--border-color);
        display: flex;
        justify-content: space-between;
        padding: .7em;
      }
      #mainContainer {
        display: block;
      }
    </style>
    <style include="gr-form-styles"></style>
    <style include="gr-menu-page-styles"></style>
    <section
        id="permission"
        class$="gr-form-styles [[_computeSectionClass(editing, _deleted)]]">
      <div id="mainContainer">
        <div class="header">
          <span class="title">[[name]]</span>
          <div class="right">
            <template is=dom-if if="[[!_permissionIsOwnerOrGlobal(permission.id, section)]]">
              <paper-toggle-button
                  id="exclusiveToggle"
                  checked="{{permission.value.exclusive}}"
                  on-change="_handleValueChange"
                  disabled$="[[!editing]]"></paper-toggle-button>Exclusive
            </template>
            <gr-button
                link
                id="removeBtn"
                on-tap="_handleRemovePermission">Remove</gr-button>
          </div>
        </div><!-- end header -->
        <div class="rules">
          <template
              is="dom-repeat"
              items="{{_rules}}"
              as="rule">
            <gr-rule-editor
                has-range="[[_computeHasRange(name)]]"
                label="[[_label]]"
                editing="[[editing]]"
                group-id="[[rule.id]]"
                group-name="[[_computeGroupName(groups, rule.id)]]"
                permission="[[permission.id]]"
                rule="{{rule}}"
                section="[[section]]"
                on-added-rule-removed="_handleAddedRuleRemoved"></gr-rule-editor>
          </template>
          <div id="addRule">
            <gr-autocomplete
                id="groupAutocomplete"
                text="{{_groupFilter}}"
                query="[[_query]]"
                placeholder="Add group"
                on-commit="_handleAddRuleItem">
            </gr-autocomplete>
          </div>
          <!-- end addRule -->
        </div> <!-- end rules -->
      </div><!-- end mainContainer -->
      <div id="deletedContainer">
        <span>[[name]] was deleted</span>
        <gr-button
            link
            id="undoRemoveBtn"
            on-tap="_handleUndoRemove">Undo</gr-button>
      </div><!-- end deletedContainer -->
    </section>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-permission.js"></script>
</dom-module>
