/**
 * @license
 * Copyright (C) 2019 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.
 */

export const htmlTemplate = Polymer.html`
    <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-click="_showKey"
                             data-index$="[[index]]"
                             link>Click to View</gr-button>
                </td>
                <td>
                  <gr-button link
                             data-index$="[[index]]"
                             on-click="_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-click="_closeOverlay">Close</gr-button>
        </gr-overlay>
      </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-click="_handleAddKey">
          Add new SSH key
        </gr-button>
      </fieldset>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
`;
