<!--
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="../../../behaviors/rest-client-behavior/rest-client-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../shared/gr-download-commands/gr-download-commands.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-download-dialog">
  <template>
    <style include="shared-styles">
      :host {
        display: block;
        padding: 1em;
      }
      header {
        display: flex;
      }
      footer {
        display: flex;
        justify-content: space-between;
        padding-top: .75em;
      }
      .closeButtonContainer {
        display: flex;
        flex: 0;
        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;
      }
      .title {
        text-align: center;
        flex: 1;
      }
    </style>
    <header>
      <span class="title">
        Patch set [[patchNum]] of [[_computePatchSetQuantity(change.revisions)]]
      </span>
      <span class="closeButtonContainer">
        <gr-button id="closeButton"
            link
            on-tap="_handleCloseTap">Close</gr-button>
      </span>
    </header>
     <gr-download-commands
          id="downloadCommands"
          commands="[[_computeDownloadCommands(change, patchNum, _selectedScheme)]]"
          schemes="[[_schemes]]"
          selected-scheme="{{_selectedScheme}}"></gr-download-commands>
    <footer>
      <div class="patchFiles">
        <label>Patch file</label>
        <div>
          <a id="download" 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 id="archives" 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>
