/**
 * @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';

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-tooltip-content
          title$="[[action.title]]"
          has-tooltip="[[_computeHasTooltip(action.title)]]"
          position-below="true"
        >
          <gr-button
            link=""
            data-action-key$="[[action.__key]]"
            class$="[[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>
        </gr-tooltip-content>
      </template>
    </section>
    <section
      id="secondaryActions"
      hidden$="[[_shouldHideActions(_topLevelActions.*, _loading)]]"
    >
      <template
        is="dom-repeat"
        items="[[_topLevelSecondaryActions]]"
        as="action"
      >
        <gr-tooltip-content
          title$="[[action.title]]"
          has-tooltip="[[_computeHasTooltip(action.title)]]"
          position-below="true"
        >
          <gr-button
            link=""
            data-action-key$="[[action.__key]]"
            class$="[[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>
        </gr-tooltip-content>
      </template>
    </section>
    <gr-button hidden$="[[!_loading]]" disabled=""
      >Loading actions...</gr-button
    >
    <gr-dropdown
      id="moreActions"
      link=""
      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" aria-labelledby="moreMessage">
      </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-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"
      comment-threads="[[commentThreads]]"
      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>
`;
