<!--
@license
Copyright (C) 2019 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="./gr-serviceuser-ssh-panel.html">
<link rel="import" href="./gr-serviceuser-http-password.html">

<dom-module id="gr-serviceuser-detail">
  <template>
    <style include="shared-styles"></style>
    <style include="gr-subpage-styles"></style>
    <style include="gr-form-styles"></style>
    <style>
      div.serviceuser-detail {
        margin: 2em auto;
        max-width: 50em;
      }

      h1#Title {
        margin-bottom: 1em;
      }

      p#ownerChangeWarning {
        margin-top: 1em;
        margin-bottom: 1em;
      }

      span#gr_serviceuser_activity {
        border-radius: 1em;
        width: 10em;
        padding: 0.3em;
        font-weight: bold;
        text-align: center;
      }

      span.Active {
        background-color: #9fcc6b;
      }

      span.Inactive {
        background-color: #f7a1ad;
      }
    </style>
    <div class="serviceuser-detail">
      <main class="gr-form-styles read-only">
        <div id="loading"
             class$="[[_computeLoadingClass(_loading)]]">
          Loading...
        </div>
        <div id="loadedContent"
             class$="[[_computeLoadingClass(_loading)]]">
          <h1 id="Title">Service User "[[_serviceUser.name]]"</h1>
          <div id="form">
            <fieldset>
              <fieldset>
                <h2 id="accountState">Account State</h2>
                <section>
                  <span class="title">Current State</span>
                  <span id="gr_serviceuser_activity"
                        class$="value [[_active(_serviceUser)]]">
                    [[_active(_serviceUser)]]
                  </span>
                </section>
                <gr-button id="statusToggleButton" on-tap="_toggleStatus" disabled="[[_loading]]">
                  [[_statusButtonText]]</gr-button>
              </fieldset>
              <fieldset>
                <h2 id="userDataHeader">User Data</h2>
                <section>
                  <span class="title">Username</span>
                  <span class="value">[[_serviceUser.username]]</span>
                </section>
                <section>
                  <span class="title">Full Name</span>
                  <span class="value">
                    <input id="serviceUserFullNameInput" bind-value="{{_newFullName}}" is="iron-input" type="text"
                      disabled="[[_changingPrefs]]" placeholder$="[[_serviceUser.name]]"
                      on-keyup="_computePrefsChanged">
                  </span>
                </section>
                <section>
                  <span class="title">Email Address</span>
                  <input id="serviceUserEmailInput" bind-value="{{_newEmail}}" is="iron-input" type="text"
                    disabled="[[_changingPrefs]]" placeholder="[[_serviceUser.email]]" on-keyup="_computePrefsChanged"
                    hidden$="[[!_allowEmail]]">
                  <span class="value" hidden$="[[_allowEmail]]">[[_serviceUser.email]]</span>
                </section>
                <section>
                  <span class="title">Owner Group</span>
                  <gr-autocomplete id="serviceUserOwnerInput" text="{{_getOwnerGroup(_serviceUser)}}"
                    value="{{_newOwner}}" query="[[_query]]" disabled="[[_changingPrefs]]"
                    on-commit="_computePrefsChanged" on-keyup="_computePrefsChanged" hidden$="[[!_allowOwner]]">
                    [[_getOwnerGroup(_serviceUser)]]
                  </gr-autocomplete>
                  <span class="value" hidden$="[[_allowOwner]]">[[_getOwnerGroup(_serviceUser)]]</span>
                </section>
                <p id="ownerChangeWarning" class="style-scope gr-settings-view" hidden$="[[!_newOwner]]">
                  [[_ownerChangeWarning]]
                </p>
                <gr-button id="savePrefs" on-tap="_handleSavePreferences" disabled="[[!_prefsChanged]]">
                  Save changes
                </gr-button>
              </fieldset>
              <fieldset>
                <h2 id="creationHeader">Creation</h2>
                <section>
                  <span class="title">Created By</span>
                  <span class="value">[[_getCreator(_serviceUser)]]</span>
                </section>
                <section>
                  <span class="title">Created At</span>
                  <span class="value">[[_serviceUser.created_at]]</span>
                </section>
              </fieldset>
              <fieldset>
                <fieldset>
                  <h2 id="credentialsHeader">Credentials</h2>
                </fieldset>
                <fieldset hidden$="[[!_allowHttpPassword]]">
                  <h3 id="HTTPCredentials">HTTP Credentials</h3>
                  <fieldset>
                    <gr-serviceuser-http-password id="httpPass">
                      </gr-http-password>
                  </fieldset>
                </fieldset>
                <fieldset>
                  <h3 id="SSHKeys">SSH keys</h3>
                  <gr-serviceuser-ssh-panel id="sshEditor"></gr-serviceuser-ssh-panel>
                </fieldset>
              </fieldset>
            </fieldset>
          </div>
        </div>
      </main>
    </div>
  </template>
  <script src="gr-serviceuser-detail.js"></script>
</dom-module>
