<!--
@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="../../../bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html">
<link rel="import" href="../../../styles/gr-form-styles.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-copy-clipboard/gr-copy-clipboard.html">
<link rel="import" href="../../shared/gr-overlay/gr-overlay.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-gpg-editor">
  <template>
    <style include="shared-styles"></style>
    <style include="gr-form-styles">
      .statusHeader {
        width: 4em;
      }
      .keyHeader {
        width: 9em;
      }
      .userIdHeader {
        width: 15em;
      }
      #viewKeyOverlay {
        padding: 2em;
        width: 50em;
      }
      .publicKey {
        font-family: var(--monospace-font-family);
        overflow-x: scroll;
        overflow-wrap: break-word;
        width: 30em;
      }
      .closeButton {
        bottom: 2em;
        position: absolute;
        right: 2em;
      }
      #existing {
        margin-bottom: 1em;
      }
      #existing .commentColumn {
        min-width: 27em;
        width: auto;
      }
    </style>
    <div class="gr-form-styles">
      <fieldset id="existing">
        <table>
          <thead>
            <tr>
              <th class="idColumn">ID</th>
              <th class="fingerPrintColumn">Fingerprint</th>
              <th class="userIdHeader">User IDs</th>
              <th class="keyHeader">Public Key</th>
              <th></th>
              <th></th>
            </tr>
          </thead>
          <tbody>
            <template is="dom-repeat" items="[[_keys]]" as="key">
              <tr>
                <td class="idColumn">[[key.id]]</td>
                <td class="fingerPrintColumn">[[key.fingerprint]]</td>
                <td class="userIdHeader">
                  <template is="dom-repeat" items="[[key.user_ids]]">
                    [[item]]
                  </template>
                </td>
                <td class="keyHeader">
                  <gr-button
                      on-tap="_showKey"
                      data-index$="[[index]]"
                      link>Click to View</gr-button>
                </td>
                <td>
                  <gr-copy-clipboard
                      has-tooltip
                      button-title="Copy GPG public key to clipboard"
                      hide-input
                      text="[[key.key]]">
                  </gr-copy-clipboard>
                </td>
                <td>
                  <gr-button
                      data-index$="[[index]]"
                      on-tap="_handleDeleteKey">Delete</gr-button>
                </td>
              </tr>
            </template>
          </tbody>
        </table>
        <gr-overlay id="viewKeyOverlay" with-backdrop>
          <fieldset>
            <section>
              <span class="title">Status</span>
              <span class="value">[[_keyToView.status]]</span>
            </section>
            <section>
              <span class="title">Key</span>
              <span class="value">[[_keyToView.key]]</span>
            </section>
          </fieldset>
          <gr-button
              class="closeButton"
              on-tap="_closeOverlay">Close</gr-button>
        </gr-overlay>
        <gr-button
            on-tap="save"
            disabled$="[[!hasUnsavedChanges]]">Save changes</gr-button>
      </fieldset>
      <fieldset>
        <section>
          <span class="title">New GPG key</span>
          <span class="value">
            <iron-autogrow-textarea
                id="newKey"
                autocomplete="on"
                bind-value="{{_newKey}}"
                placeholder="New GPG Key"></iron-autogrow-textarea>
          </span>
        </section>
        <gr-button
            id="addButton"
            disabled$="[[_computeAddButtonDisabled(_newKey)]]"
            on-tap="_handleAddKey">Add new GPG key</gr-button>
      </fieldset>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-gpg-editor.js"></script>
</dom-module>
