<!--
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-input/iron-input.html">
<link rel="import" href="../../../behaviors/rest-client-behavior.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">

<dom-module id="gr-download-dialog">
  <template>
    <style>
      :host {
        display: block;
        padding: 1em;
      }
      ul {
        list-style: none;
        margin-bottom: .5em;
      }
      li {
        display: inline-block;
        margin: 0;
        padding: 0;
      }
      li gr-button {
        margin-right: 1em;
      }
      label,
      input {
        display: block;
      }
      label {
        font-weight: bold;
      }
      input {
        font-family: var(--monospace-font-family);
        font-size: inherit;
        margin-bottom: .5em;
        width: 60em;
      }
      li[selected] gr-button {
        color: #000;
        font-weight: bold;
        text-decoration: none;
      }
      header {
        display: flex;
        justify-content: space-between;
      }
      main {
        border-bottom: 1px solid #ddd;
        border-top: 1px solid #ddd;
        padding: .5em;
      }
      footer {
        display: flex;
        justify-content: space-between;
        padding-top: .75em;
      }
      .closeButtonContainer {
        display: flex;
        flex: 1;
        justify-content: flex-end;
      }
      .patchFiles {
        margin-right: 2em;
      }
      .patchFiles a,
      .archives a {
        display: inline-block;
        margin-right: 1em;
      }
      .patchFiles a:last-of-type,
      .archives a:last-of-type {
        margin-right: 0;
      }
    </style>
    <header>
      <ul hidden$="[[!_schemes.length]]" hidden>
        <template is="dom-repeat" items="[[_schemes]]" as="scheme">
          <li selected$="[[_computeSchemeSelected(scheme, _selectedScheme)]]">
            <gr-button link data-scheme$="[[scheme]]" on-tap="_handleSchemeTap">
              [[scheme]]
            </gr-button>
          </li>
        </template>
      </ul>
      <span class="closeButtonContainer">
        <gr-button link on-tap="_handleCloseTap">Close</gr-button>
      </span>
    </header>
    <main hidden$="[[!_schemes.length]]" hidden>
      <template is="dom-repeat"
          items="[[_computeDownloadCommands(change, patchNum, _selectedScheme)]]"
          as="command">
        <div class="command">
          <label>[[command.title]]</label>
          <input is="iron-input"
              type="text"
              bind-value="[[command.command]]"
              on-tap="_handleInputTap"
              readonly>
        </div>
      </template>
    </main>
    <footer>
      <div class="patchFiles">
        <label>Patch file</label>
        <div>
          <a href$="[[_computeDownloadLink(change, patchNum)]]">
            [[_computeDownloadFilename(change, patchNum)]]
          </a>
          <a href$="[[_computeZipDownloadLink(change, patchNum)]]">
            [[_computeZipDownloadFilename(change, patchNum)]]
          </a>
        </div>
      </div>
      <div class="archivesContainer" hidden$="[[!config.archives.length]]" hidden>
        <label>Archive</label>
        <div class="archives">
          <template is="dom-repeat" items="[[config.archives]]" as="format">
            <a href$="[[_computeArchiveDownloadLink(change, patchNum, format)]]">
              [[format]]
            </a>
          </template>
        </div>
      </div>
    </footer>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-download-dialog.js"></script>
</dom-module>
