/**
 * @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: flex;
      font-family: var(--font-family);
    }
    #actionLoadingMessage,
    #mainContent,
    section {
      display: flex;
    }
    #actionLoadingMessage,
    gr-button,
    gr-dropdown {
      /* px because don't have the same font size */
      margin-left: 8px;
    }
    #actionLoadingMessage {
      align-items: center;
      color: var(--deemphasized-text-color);
    }
    #confirmSubmitDialog .changeSubject {
      margin: var(--spacing-l);
      text-align: center;
    }
    iron-icon {
      color: inherit;
      margin-right: var(--spacing-xs);
    }
    #moreActions iron-icon {
      margin: 0;
    }
    #moreMessage,
    .hidden {
      display: none;
    }
    @media screen and (max-width: 50em) {
      #mainContent {
        flex-wrap: wrap;
      }
      gr-button {
        --gr-button: {
          padding: var(--spacing-m);
          white-space: nowrap;
        }
      }
      gr-button,
      gr-dropdown {
        margin: 0;
      }
      #actionLoadingMessage {
        margin: var(--spacing-m);
        text-align: center;
      }
      #moreMessage {
        display: inline;
      }
    }
  </style>
  <div id="mainContent">
    <span id="actionLoadingMessage" hidden$="[[!_actionLoadingMessage]]">
      [[_actionLoadingMessage]]</span
    >
    <section
      id="primaryActions"
      hidden$="[[_shouldHideActions(_topLevelActions.*, _loading)]]"
    >
      <template is="dom-repeat" items="[[_topLevelPrimaryActions]]" as="action">
        <gr-button
          link=""
          title$="[[action.title]]"
          has-tooltip="[[_computeHasTooltip(action.title)]]"
          position-below="true"
          data-action-key$="[[action.__key]]"
          data-action-type$="[[action.__type]]"
          data-label$="[[action.label]]"
          disabled$="[[_calculateDisabled(action, _hasKnownChainState)]]"
          on-click="_handleActionTap"
        >
          <iron-icon
            class$="[[_computeHasIcon(action)]]"
            icon$="gr-icons:[[action.icon]]"
          ></iron-icon>
          [[action.label]]
        </gr-button>
      </template>
    </section>
    <section
      id="secondaryActions"
      hidden$="[[_shouldHideActions(_topLevelActions.*, _loading)]]"
    >
      <template
        is="dom-repeat"
        items="[[_topLevelSecondaryActions]]"
        as="action"
      >
        <gr-button
          link=""
          title$="[[action.title]]"
          has-tooltip="[[_computeHasTooltip(action.title)]]"
          position-below="true"
          data-action-key$="[[action.__key]]"
          data-action-type$="[[action.__type]]"
          data-label$="[[action.label]]"
          disabled$="[[_calculateDisabled(action, _hasKnownChainState)]]"
          on-click="_handleActionTap"
        >
          <iron-icon
            class$="[[_computeHasIcon(action)]]"
            icon$="gr-icons:[[action.icon]]"
          ></iron-icon>
          [[action.label]]
        </gr-button>
      </template>
    </section>
    <gr-button hidden$="[[!_loading]]" disabled=""
      >Loading actions...</gr-button
    >
    <gr-dropdown
      id="moreActions"
      link=""
      tabindex="0"
      vertical-offset="32"
      horizontal-align="right"
      on-tap-item="_handleOverflowItemTap"
      hidden$="[[_shouldHideActions(_menuActions.*, _loading)]]"
      disabled-ids="[[_disabledMenuActions]]"
      items="[[_menuActions]]"
    >
      <iron-icon icon="gr-icons:more-vert"></iron-icon>
      <span id="moreMessage">More</span>
    </gr-dropdown>
  </div>
  <gr-overlay id="overlay" with-backdrop="">
    <gr-confirm-rebase-dialog
      id="confirmRebase"
      class="confirmDialog"
      change-number="[[change._number]]"
      on-confirm="_handleRebaseConfirm"
      on-cancel="_handleConfirmDialogCancel"
      branch="[[change.branch]]"
      has-parent="[[hasParent]]"
      rebase-on-current="[[_computeRebaseOnCurrent(_revisionRebaseAction)]]"
      hidden=""
    ></gr-confirm-rebase-dialog>
    <gr-confirm-cherrypick-dialog
      id="confirmCherrypick"
      class="confirmDialog"
      change-status="[[changeStatus]]"
      commit-message="[[commitMessage]]"
      commit-num="[[commitNum]]"
      on-confirm="_handleCherrypickConfirm"
      on-cancel="_handleConfirmDialogCancel"
      project="[[change.project]]"
      hidden=""
    ></gr-confirm-cherrypick-dialog>
    <gr-confirm-cherrypick-conflict-dialog
      id="confirmCherrypickConflict"
      class="confirmDialog"
      on-confirm="_handleCherrypickConflictConfirm"
      on-cancel="_handleConfirmDialogCancel"
      hidden=""
    ></gr-confirm-cherrypick-conflict-dialog>
    <gr-confirm-move-dialog
      id="confirmMove"
      class="confirmDialog"
      on-confirm="_handleMoveConfirm"
      on-cancel="_handleConfirmDialogCancel"
      project="[[change.project]]"
      hidden=""
    ></gr-confirm-move-dialog>
    <gr-confirm-revert-dialog
      id="confirmRevertDialog"
      class="confirmDialog"
      on-confirm="_handleRevertDialogConfirm"
      on-cancel="_handleConfirmDialogCancel"
      hidden=""
    ></gr-confirm-revert-dialog>
    <gr-confirm-revert-submission-dialog
      id="confirmRevertSubmissionDialog"
      class="confirmDialog"
      commit-message="[[commitMessage]]"
      on-confirm="_handleRevertSubmissionDialogConfirm"
      on-cancel="_handleConfirmDialogCancel"
      hidden=""
    ></gr-confirm-revert-submission-dialog>
    <gr-confirm-abandon-dialog
      id="confirmAbandonDialog"
      class="confirmDialog"
      on-confirm="_handleAbandonDialogConfirm"
      on-cancel="_handleConfirmDialogCancel"
      hidden=""
    ></gr-confirm-abandon-dialog>
    <gr-confirm-submit-dialog
      id="confirmSubmitDialog"
      class="confirmDialog"
      change="[[change]]"
      action="[[_revisionSubmitAction]]"
      on-cancel="_handleConfirmDialogCancel"
      on-confirm="_handleSubmitConfirm"
      hidden=""
    ></gr-confirm-submit-dialog>
    <gr-dialog
      id="createFollowUpDialog"
      class="confirmDialog"
      confirm-label="Create"
      on-confirm="_handleCreateFollowUpChange"
      on-cancel="_handleCloseCreateFollowUpChange"
    >
      <div class="header" slot="header">
        Create Follow-Up Change
      </div>
      <div class="main" slot="main">
        <gr-create-change-dialog
          id="createFollowUpChange"
          branch="[[change.branch]]"
          base-change="[[change.id]]"
          repo-name="[[change.project]]"
          private-by-default="[[privateByDefault]]"
        ></gr-create-change-dialog>
      </div>
    </gr-dialog>
    <gr-dialog
      id="confirmDeleteDialog"
      class="confirmDialog"
      confirm-label="Delete"
      confirm-on-enter=""
      on-cancel="_handleConfirmDialogCancel"
      on-confirm="_handleDeleteConfirm"
    >
      <div class="header" slot="header">
        Delete Change
      </div>
      <div class="main" slot="main">
        Do you really want to delete the change?
      </div>
    </gr-dialog>
    <gr-dialog
      id="confirmDeleteEditDialog"
      class="confirmDialog"
      confirm-label="Delete"
      confirm-on-enter=""
      on-cancel="_handleConfirmDialogCancel"
      on-confirm="_handleDeleteEditConfirm"
    >
      <div class="header" slot="header">
        Delete Change Edit
      </div>
      <div class="main" slot="main">
        Do you really want to delete the edit?
      </div>
    </gr-dialog>
  </gr-overlay>
  <gr-js-api-interface id="jsAPI"></gr-js-api-interface>
  <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
`;
