<!--
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: #fafafa;
        border: 1px solid #d1d2d3;
        border-bottom: 0;
      }
      .editing .rules {
        border-bottom: 1px solid #d1d2d3;
      }
      .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 #d1d2d3;
        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">
            <paper-toggle-button
                id="exclusiveToggle"
                checked="{{permission.value.exclusive}}"
                on-change="_handleValueChange"
                disabled$="[[!editing]]"></paper-toggle-button>Exclusive
            <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
                label="[[_label]]"
                editing="[[editing]]"
                group-id="[[rule.id]]"
                group-name="[[_computeGroupName(groups, rule.id)]]"
                permission="[[permission.id]]"
                rule="{{rule}}"
                section="[[section]]"></gr-rule-editor>
          </template>
          <div id="addRule">
            <gr-autocomplete
                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>
