<!--
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="../../../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;
      }
      #deletedContainer {
        border: 1px solid #d1d2d3;
        padding: .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;
      }
      .editing #removeBtn {
        display: block;
      }
      .editing #addRule {
        display: block;
        padding: .7em;
      }
      #deletedContainer,
      .deleted #mainContainer {
        display: none;
      }
      .deleted #deletedContainer,
      #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>
          <gr-button
              id="removeBtn"
              on-tap="_handleRemovePermission">Remove</gr-button>
        </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">
        [[name]] was deleted
        <gr-button
            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>
