/**
 * @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: block;
    }
    :host([disabled]) iron-autogrow-textarea {
      opacity: 0.5;
    }
    .viewer {
      background-color: var(--view-background-color);
      border: 1px solid var(--view-background-color);
      border-radius: var(--border-radius);
      box-shadow: var(--elevation-level-1);
      padding: var(--spacing-m);
    }
    :host([collapsed]) .viewer,
    .viewer.new-change-summary-true[collapsed] {
      max-height: var(--collapsed-max-height, 300px);
      overflow: hidden;
    }
    .editor.new-change-summary-true iron-autogrow-textarea,
    .viewer.new-change-summary-true {
      min-height: 100px;
    }
    .editor iron-autogrow-textarea {
      background-color: var(--view-background-color);
      width: 100%;
      display: block;

      /* You have to also repeat everything from shared-styles here, because
           you can only *replace* --iron-autogrow-textarea vars as a whole. */
      --iron-autogrow-textarea: {
        box-sizing: border-box;
        padding: var(--spacing-m);
        overflow-y: hidden;
        white-space: pre;
      }
    }
    .editButtons {
      display: flex;
      justify-content: space-between;
    }
    .show-all-container {
      background-color: var(--view-background-color);
      display: flex;
      justify-content: flex-end;
      border-top-width: 1px;
      border-top-style: solid;
      border-radius: 0 0 4px 4px;
      border-color: var(--border-color);
      box-shadow: var(--elevation-level-1);
      /* slightly up to cover rounded corner of the commit msg */
      margin-top: calc(-1 * var(--spacing-xs));
      /* To make this bar pop over editor, since editor has relative position. 
      */
      position: relative;
    }
    .show-all-container .show-all-button {
      margin-right: auto;
    }
    .show-all-container iron-icon {
      color: inherit;
      --iron-icon-height: 18px;
      --iron-icon-width: 18px;
    }
    .cancel-button {
      margin-right: var(--spacing-l);
    }
    .save-button {
      margin-right: var(--spacing-xs);
    }
    gr-button {
      font-family: var(--font-family);
      line-height: var(--line-height-normal);
      padding: var(--spacing-xs);
    }
  </style>
  <div
    class$="viewer new-change-summary-[[_isNewChangeSummaryUiEnabled]]"
    hidden$="[[editing]]"
    collapsed$="[[_computeCommitMessageCollapsed(_commitCollapsed, commitCollapsible)]]"
  >
    <slot></slot>
  </div>
  <div
    class$="editor new-change-summary-[[_isNewChangeSummaryUiEnabled]]"
    hidden$="[[!editing]]"
  >
    <div>
      <iron-autogrow-textarea
        autocomplete="on"
        bind-value="{{_newContent}}"
        disabled="[[disabled]]"
      ></iron-autogrow-textarea>
      <div class="editButtons" hidden$="[[_isNewChangeSummaryUiEnabled]]">
        <gr-button
          primary=""
          on-click="_handleSave"
          disabled="[[_saveDisabled]]"
          >Save</gr-button
        >
        <gr-button on-click="_handleCancel" disabled="[[disabled]]"
          >Cancel</gr-button
        >
      </div>
    </div>
  </div>
  <template is="dom-if" if="[[_isNewChangeSummaryUiEnabled]]">
    <div class="show-all-container" hidden$="[[_hideShowAllContainer]]">
      <gr-button
        link=""
        class="show-all-button"
        on-click="_toggleCommitCollapsed"
        hidden$="[[_hideShowAllButton]]"
        ><iron-icon
          icon="gr-icons:expand-more"
          hidden$="[[!_commitCollapsed]]"
        ></iron-icon
        ><iron-icon
          icon="gr-icons:expand-less"
          hidden$="[[_commitCollapsed]]"
        ></iron-icon>
        [[_computeCollapseText(_commitCollapsed)]]
      </gr-button>
      <gr-button
        link=""
        class="edit-commit-message"
        title="Edit commit message"
        on-click="_handleEditCommitMessage"
        hidden$="[[hideEditCommitMessage]]"
        ><iron-icon icon="gr-icons:edit"></iron-icon> Edit</gr-button
      >
      <div class="editButtons" hidden$="[[!editing]]">
        <gr-button
          link=""
          class="cancel-button"
          on-click="_handleCancel"
          disabled="[[disabled]]"
          >Cancel</gr-button
        >
        <gr-button
          class="save-button"
          primary=""
          on-click="_handleSave"
          disabled="[[_saveDisabled]]"
          >Save</gr-button
        >
      </div>
    </div>
  </template>
`;
