<!--
@license
Copyright (C) 2018 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.
-->
<!-- TODO(maximeg) Import the web components when this issue is solved:
        https://bugs.chromium.org/p/gerrit/issues/detail?id=8096 -->

<dom-module id="gr-simple-submit-rules-label-config">
  <template>
    <style include="shared-styles"></style>
    <style include="gr-form-styles"></style>
    <style>
      :host {
        border: 1px solid var(--border-color);
        display: block;
        margin-bottom: 1em;
        padding: 1em 1em;
      }

      fieldset {
        border: 1px solid var(--border-color);
      }
    </style>

    <main class="gr-form-styles">
      <h3 id="options">Label [[labelName]]</h3>

      <fieldset id="simple-submit-rules">

        <section>
          <span class="title">Should a vote with the maximum value be required?</span>
          <span class="value">
            <input id="maxVoteRequired"
              type="checkbox"
              checked="{{_maxVoteRequired::change}}"
              disabled$="[[readOnly]]">
          </span>
        </section>

        <section>
          <span class="title">Should votes with the lowest value block submission?</span>
          <span class="value">
            <input id="negativeBlocks"
                type="checkbox"
                checked="{{_negativeBlocks::change}}"
                disabled$="[[readOnly]]">
          </span>
        </section>

        <section>
          <span class="title">(Expert users) Function name</span>
          <span class="value">
            <gr-select id="functionName"
                bind-value="{{_labelConfig.function}}">
              <select disabled$="[[readOnly]]">
                <option value="MaxNoBlock">MaxNoBlock</option>
                <option value="MaxWithBlock">MaxWithBlock</option>
                <option value="AnyWithBlock">AnyWithBlock</option>
                <option value="NoBlock">NoBlock</option>
                <option value="NoOp">NoOp</option>
              </select>
            </gr-select>
          </span>
        </section>

        <section>
          <span class="title">Allow approval by the change owner</span>
          <span class="value">
            <input id="allowUnresolvedComments"
                type="checkbox"
                checked="{{_labelConfig.ignore_self_approval::change}}"
                disabled$="[[readOnly]]">
          </span>
        </section>
      </fieldset>

      <fieldset>
        <section>
          <span class="title">
            When a new patchset is uploaded, Gerrit should copy votes ...
          </span>
        </section>

        <!-- copyMinScore -->
        <section>
          <span class="title">
            <gr-tooltip-content class="draftTooltip"
                has-tooltip
                title="Should votes of the minimal value be kept?"
                max-width="20em"
                show-icon>
              with minimal value
            </gr-tooltip-content>
          </span>
          <span class="value">
          <input id="copyMinScore"
              type="checkbox"
              checked="{{_copyScores.copyMinScore::change}}"
              disabled$="[[readOnly]]">
          </span>
        </section>

        <!-- copyMaxScore -->
        <section>
          <span class="title">
            <gr-tooltip-content class="draftTooltip"
                has-tooltip
                title="Should votes of the maximal value be kept?"
                max-width="20em"
                show-icon>
              with maximal value
            </gr-tooltip-content>
          </span>
          <span class="value">
            <input id="copyMaxScore"
                type="checkbox"
                checked="{{_copyScores.copyMaxScore::change}}"
                disabled$="[[readOnly]]">
          </span>
        </section>

        <!-- copyAllScoresOnTrivialRebase -->
        <section>
          <span class="title">
            <gr-tooltip-content class="draftTooltip"
                has-tooltip
                title="Should votes be kept when a trivial rebase
                         is done (same commit message and content, different parent)?"
                max-width="20em"
                show-icon>
              on trivial rebase
            </gr-tooltip-content>
          </span>
          <span class="value">
            <input id="copyAllScoresOnTrivialRebase"
                type="checkbox"
                checked="{{_copyScores.copyAllScoresOnTrivialRebase::change}}"
                disabled$="[[readOnly]]">
          </span>
        </section>

        <!-- copyAllScoresIfNoCodeChange -->
        <section>
          <span class="title">
            <gr-tooltip-content class="draftTooltip"
                has-tooltip
                title="Should votes be kept when the commit message is modified?
                         Changing the parent or changing files invalidates this."
                max-width="20em"
                show-icon>
              when only the commit message is modified
            </gr-tooltip-content>
          </span>
          <span class="value">
            <input id="copyAllScoresIfNoCodeChange"
                type="checkbox"
                checked="{{_copyScores.copyAllScoresIfNoCodeChange::change}}"
                disabled$="[[readOnly]]">
          </span>
        </section>

        <!-- copyAllScoresIfNoChange -->
        <section>
          <span class="title">
            <gr-tooltip-content class="draftTooltip"
                has-tooltip
                title="Should votes be kept when the commit metadata (author, commit
                        date) are modified? Changing anything else from the commit
                        (message, content, parent) invalidates this."
                max-width="20em"
                show-icon>
              when only commit metatada are modified
            </gr-tooltip-content>
          </span>
          <span class="value">
            <input id="copyAllScoresIfNoChange"
                type="checkbox"
                checked="{{_copyScores.copyAllScoresIfNoChange::change}}"
                disabled$="[[readOnly]]">
          </span>
        </section>

        <!-- copyAllScoresOnMergeFirstParentUpdate -->
        <section>
          <span class="title">
            <gr-tooltip-content class="draftTooltip"
                has-tooltip
                title="Only applies to Merge commits. Should votes be kept when the
                        destination commit of a merge commit is changed?"
                max-width="20em"
                show-icon>
              on rebased merge commits
            </gr-tooltip-content>
          </span>
          <span class="value">
            <input id="copyAllScoresOnMergeFirstParentUpdate"
                type="checkbox"
                checked="{{_copyScores.copyAllScoresOnMergeFirstParentUpdate::change}}"
                disabled$="[[readOnly]]">
          </span>
        </section>

      </fieldset>
    </main>
  </template>
  <script src="./gr-simple-submit-rules-label-config.js"></script>
</dom-module>
