<!--
@license
Copyright (C) 2016 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-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-ssh-editor">
  <template>
    <style include="shared-styles"></style>
    <style include="gr-form-styles">
      .statusHeader {
        width: 4em;
      }
      .keyHeader {
        width: 7.5em;
      }
      #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="commentColumn">Comment</th>
              <th class="statusHeader">Status</th>
              <th class="keyHeader">Public key</th>
              <th></th>
            </tr>
          </thead>
          <tbody>
            <template is="dom-repeat" items="[[_keys]]" as="key">
              <tr>
                <td class="commentColumn">[[key.comment]]</td>
                <td>[[_getStatusLabel(key.valid)]]</td>
                <td>
                  <gr-button
                      link
                      on-tap="_showKey"
                      data-index$="[[index]]"
                      link>Click to View</gr-button>
                </td>
                <td>
                  <gr-button
                      link
                      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">Algorithm</span>
              <span class="value">[[_keyToView.algorithm]]</span>
            </section>
            <section>
              <span class="title">Public key</span>
              <span class="value publicKey">[[_keyToView.encoded_key]]</span>
            </section>
            <section>
              <span class="title">Comment</span>
              <span class="value">[[_keyToView.comment]]</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 SSH key</span>
          <span class="value">
            <iron-autogrow-textarea
                id="newKey"
                autocomplete="on"
                bind-value="{{_newKey}}"
                placeholder="New SSH Key"></iron-autogrow-textarea>
          </span>
        </section>
        <gr-button
            id="addButton"
            link
            disabled$="[[_computeAddButtonDisabled(_newKey)]]"
            on-tap="_handleAddKey">Add new SSH key</gr-button>
      </fieldset>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-ssh-editor.js"></script>
</dom-module>
