/**
 * @license
 * Copyright (C) 2020 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.
 */
import {html} from '@polymer/polymer/lib/utils/html-tag.js';

export const htmlTemplate = html`
  <style include="shared-styles">
    :host {
      display: block;
      padding: var(--spacing-m) 0;
    }
    section {
      display: flex;
      padding: var(--spacing-m) var(--spacing-xl);
    }
    .flexContainer {
      display: flex;
      justify-content: space-between;
      padding-top: var(--spacing-m);
    }
    .footer {
      justify-content: flex-end;
    }
    .closeButtonContainer {
      align-items: flex-end;
      display: flex;
      flex: 0;
      justify-content: flex-end;
    }
    .patchFiles,
    .archivesContainer {
      padding-bottom: var(--spacing-m);
    }
    .patchFiles {
      margin-right: var(--spacing-xxl);
    }
    .patchFiles a,
    .archives a {
      display: inline-block;
      margin-right: var(--spacing-l);
    }
    .patchFiles a:last-of-type,
    .archives a:last-of-type {
      margin-right: 0;
    }
    .title {
      flex: 1;
      font-weight: var(--font-weight-bold);
    }
    .hidden {
      display: none;
    }
    gr-download-commands {
      width: min(80vw, 1200px);
    }
  </style>
  <section>
    <h3 class="title">
      Patch set [[patchNum]] of [[_computePatchSetQuantity(change.revisions)]]
    </h3>
  </section>
  <section class$="[[_computeShowDownloadCommands(_schemes)]]">
    <gr-download-commands
      id="downloadCommands"
      commands="[[_computeDownloadCommands(change, patchNum, _selectedScheme)]]"
      schemes="[[_schemes]]"
      selected-scheme="{{_selectedScheme}}"
    ></gr-download-commands>
  </section>
  <section class="flexContainer">
    <div
      class="patchFiles"
      hidden="[[_computeHidePatchFile(change, patchNum)]]"
    >
      <label>Patch file</label>
      <div>
        <a
          id="download"
          href$="[[_computeDownloadLink(change, patchNum)]]"
          download=""
        >
          [[_computeDownloadFilename(change, patchNum)]]
        </a>
        <a href$="[[_computeZipDownloadLink(change, patchNum)]]" download="">
          [[_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)]]"
            download=""
          >
            [[format]]
          </a>
        </template>
      </div>
    </div>
  </section>
  <section class="footer">
    <span class="closeButtonContainer">
      <gr-button id="closeButton" link="" on-click="_handleCloseTap"
        >Close</gr-button
      >
    </span>
  </section>
`;
