/**
 * @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="gr-font-styles">
    /* Workaround for empty style block - see https://github.com/Polymer/tools/issues/408 */
  </style>
  <style include="shared-styles">
    /* Workaround for empty style block - see https://github.com/Polymer/tools/issues/408 */
  </style>
  <style include="gr-subpage-styles">
    /* Workaround for empty style block - see https://github.com/Polymer/tools/issues/408 */
  </style>
  <style include="gr-form-styles">
    #form gr-button {
      margin-bottom: var(--spacing-xxl);
    }
  </style>
  <div class="main gr-form-styles read-only">
    <h1 id="Title" class="heading-1">Repository Commands</h1>
    <div id="loading" class$="[[_computeLoadingClass(_loading)]]">
      Loading...
    </div>
    <div id="loadedContent" class$="[[_computeLoadingClass(_loading)]]">
      <h2 id="options" class="heading-2">Command</h2>
      <div id="form">
        <h3 class="heading-3">Create change</h3>
        <gr-button loading="[[_creatingChange]]" on-click="_createNewChange">
          Create change
        </gr-button>
        <h3 class="heading-3">Edit repo config</h3>
        <gr-button
          id="editRepoConfig"
          loading="[[_editingConfig]]"
          on-click="_handleEditRepoConfig"
        >
          Edit repo config
        </gr-button>
        <h3 class="heading-3" hidden="[[!_repoConfig.actions.gc.enabled]]">
          [[_repoConfig.actions.gc.label]]
        </h3>
        <gr-button
          hidden="[[!_repoConfig.actions.gc.enabled]]"
          title="[[_repoConfig.actions.gc.title]]"
          loading="[[_runningGC]]"
          on-click="_handleRunningGC"
        >
          [[_repoConfig.actions.gc.label]]
        </gr-button>
        <gr-endpoint-decorator name="repo-command">
          <gr-endpoint-param name="config" value="[[_repoConfig]]">
          </gr-endpoint-param>
          <gr-endpoint-param name="repoName" value="[[repo]]">
          </gr-endpoint-param>
        </gr-endpoint-decorator>
      </div>
    </div>
  </div>
  <gr-overlay id="createChangeOverlay" with-backdrop="">
    <gr-dialog
      id="createChangeDialog"
      confirm-label="Create"
      disabled="[[!_canCreate]]"
      on-confirm="_handleCreateChange"
      on-cancel="_handleCloseCreateChange"
    >
      <div class="header" slot="header">Create Change</div>
      <div class="main" slot="main">
        <gr-create-change-dialog
          id="createNewChangeModal"
          can-create="{{_canCreate}}"
          repo-name="[[repo]]"
        ></gr-create-change-dialog>
      </div>
    </gr-dialog>
  </gr-overlay>
`;
