<!--
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">

<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>
  </template>
  <script src="gr-download-dialog.js"></script>
</dom-module>
