<!--
@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.
-->

<link rel="import" href="../../../behaviors/base-url-behavior/base-url-behavior.html">
<link rel="import" href="/bower_components/iron-input/iron-input.html">
<link rel="import" href="/bower_components/polymer/polymer.html">
<link rel="import" href="../../../styles/gr-form-styles.html">
<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">

<dom-module id="gr-cla-view">
  <template>
    <style include="shared-styles">
      h1 {
        margin-bottom: .6em;
      }
      h3 {
        margin-bottom: .5em;
      }
      .agreementsUrl {
        border: 0.1em solid #b0bdcc;
        margin-bottom: 1.25em;
        margin-left: 1.25em;
        margin-right: 1.25em;
        padding: 0.3em;
      }
      #claNewAgreementsLabel {
        font-weight: var(--font-weight-bold);
      }
      #claNewAgreement {
        display: none;
      }
      #claNewAgreement.show {
        display: block;
      }
      .contributorAgreementButton {
        font-weight: var(--font-weight-bold);
      }
      .alreadySubmittedText {
        color: var(--error-text-color);
        margin: 0 2em;
        padding: .5em;
      }
      .alreadySubmittedText.hide,
      .hideAgreementsTextBox {
        display: none;
      }
      main {
        margin: 2em auto;
        max-width: 50em;
      }
    </style>
    <style include="gr-form-styles"></style>
    <main>
      <h1>New Contributor Agreement</h1>
      <h3>Select an agreement type:</h3>
      <template is="dom-repeat" items="[[_serverConfig.auth.contributor_agreements]]">
        <span class="contributorAgreementButton">
          <input id$="claNewAgreementsInput[[item.name]]"
              name="claNewAgreementsRadio"
              type="radio"
              data-name$="[[item.name]]"
              data-url$="[[item.url]]"
              on-tap="_handleShowAgreement"
              disabled$="[[_disableAggreements(item, _groups, _signedAgreements)]]">
          <label id="claNewAgreementsLabel">[[item.name]]</label>
        </span>
        <div class$="alreadySubmittedText [[_hideAggreements(item, _groups, _signedAgreements)]]">
          Agreement already submitted.
        </div>
        <div class="agreementsUrl">
          [[item.description]]
        </div>
      </template>
      <div id="claNewAgreement" class$="[[_computeShowAgreementsClass(_showAgreements)]]">
        <h3 class="smallHeading">Review the agreement:</h3>
        <div id="agreementsUrl" class="agreementsUrl">
          <a href$="[[_agreementsUrl]]" target="blank" rel="noopener">
            Please review the agreement.</a>
        </div>
        <div class$="agreementsTextBox [[_computeHideAgreementClass(_agreementName, _serverConfig.auth.contributor_agreements)]]">
          <h3 class="smallHeading">Complete the agreement:</h3>
          <iron-input bind-value="{{_agreementsText}}"
                      placeholder="Enter 'I agree' here">
            <input id="input-agreements"
                   is="iron-input"
                   bind-value="{{_agreementsText}}"
                   placeholder="Enter 'I agree' here">
          </iron-input>
          <gr-button on-tap="_handleSaveAgreements" disabled="[[_disableAgreementsText(_agreementsText)]]">
            Submit
          </gr-button>
        </div>
      </div>
    </main>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-cla-view.js"></script>
</dom-module>
