<!--
@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/iron-input/iron-input.html">
<link rel="import" href="../../../styles/gr-form-styles.html">
<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-icons/gr-icons.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../gr-permission/gr-permission.html">

<script src="../../../scripts/util.js"></script>

<dom-module id="gr-access-section">
  <template>
    <style include="shared-styles">
      :host {
        display: block;
        margin-bottom: 1em;
      }
      fieldset {
        border: 1px solid var(--border-color);
      }
      .name {
        align-items: center;
        display: flex;
      }
      .header,
      #deletedContainer {
        align-items: center;
        background: #f6f6f6;
        border-bottom: 1px dotted var(--border-color);
        display: flex;
        justify-content: space-between;
        min-height: 3em;
        padding: 0 .7em;
      }
      #deletedContainer {
        border-bottom: 0;
      }
      .sectionContent {
        padding: .7em;
      }
      #editBtn,
      .editing #editBtn.global,
      #deletedContainer,
      .deleted #mainContainer,
      #addPermission,
      #deleteBtn,
      .editingRef .name,
      #editRefInput {
        display: none;
      }
      .editing #editBtn,
      .editingRef #editRefInput {
        display: flex;
      }
      .deleted #deletedContainer {
        display: flex;
      }
      .editing #addPermission,
      #mainContainer,
      .editing #deleteBtn  {
        display: block;
      }
      .editing #deleteBtn,
      #undoRemoveBtn {
        padding-right: .7em;
      }
    </style>
    <style include="gr-form-styles"></style>
    <fieldset id="section"
        class$="gr-form-styles [[_computeSectionClass(editing, canUpload, ownerOf, _editingRef, _deleted)]]">
      <div id="mainContainer">
        <div class="header">
          <div class="name">
            <h3>[[_computeSectionName(section.id)]]</h3>
            <gr-button
                id="editBtn"
                link
                class$="[[_computeEditBtnClass(section.id)]]"
                on-tap="editReference">
              <iron-icon id="icon" icon="gr-icons:create"></iron-icon>
            </gr-button>
          </div>
          <input
              id="editRefInput"
              bind-value="{{section.id}}"
              is="iron-input"
              type="text"
              on-input="_handleValueChange">
          <gr-button
              link
              id="deleteBtn"
              on-tap="_handleRemoveReference">Remove</gr-button>
        </div><!-- end header -->
        <div class="sectionContent">
          <template
              is="dom-repeat"
              items="{{_permissions}}"
              as="permission">
            <gr-permission
                name="[[_computePermissionName(section.id, permission, permissionValues, capabilities)]]"
                permission="{{permission}}"
                labels="[[labels]]"
                section="[[section.id]]"
                editing="[[editing]]"
                groups="[[groups]]"
                on-added-permission-removed="_handleAddedPermissionRemoved">
            </gr-permission>
          </template>
          <div id="addPermission">
            Add permission:
            <select id="permissionSelect">
              <!-- called with a third parameter so that permissions update
                  after a new section is added. -->
              <template
                  is="dom-repeat"
                  items="[[_computePermissions(section.id, capabilities, labels, section.value.permissions.*)]]">
                <option value="[[item.value.id]]">[[item.value.name]]</option>
              </template>
            </select>
            <gr-button
                link
                id="addBtn"
                on-tap="_handleAddPermission">Add</gr-button>
          </div>
          <!-- end addPermission -->
        </div><!-- end sectionContent -->
      </div><!-- end mainContainer -->
      <div id="deletedContainer">
        <span>[[_computeSectionName(section.id)]] was deleted</span>
        <gr-button
            link
            id="undoRemoveBtn"
            on-tap="_handleUndoRemove">Undo</gr-button>
      </div><!-- end deletedContainer -->
    </fieldset>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-access-section.js"></script>
</dom-module>
