<!--
@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.value {
        width: 50%;
      }

      input.wide {
        width: 100%;
      }

      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-click="_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" hidden$="[[!_allowFullName]]">
                    <iron-input bind-value="{{_newFullName}}">
                      <input id="serviceUserFullNameInput" class="wide" value="{{_newFullName::input}}"
                             type="text" disabled$="[[_changingPrefs]]"
                             placeholder$="[[_serviceUser.name]]"
                             on-keyup="_computePrefsChanged">
                    </iron-input>
                  </span>
                </section>
                <section>
                  <span class="title">Email Address</span>
                  <span class="value" hidden$="[[!_allowEmail]]">
                    <iron-input bind-value="{{_newEmail}}">
                      <input id="serviceUserEmailInput" class="wide" value="{{_newEmail::input}}"
                            type="text" disabled$="[[_changingPrefs]]"
                            placeholder="[[_serviceUser.email]]" on-keyup="_computePrefsChanged"
                            hidden$="[[!_allowEmail]]">
                    </iron-input>
                  </span>
                  <span class="value" hidden$="[[_allowEmail]]">[[_serviceUser.email]]</span>
                </section>
                <section>
                  <span class="title">Owner Group</span>
                  <span class="value" hidden$="[[!_allowOwner]]">
                    <gr-autocomplete id="serviceUserOwnerInput" text="{{_getOwnerGroup(_serviceUser)}}"
                      value="{{_newOwner}}" query="[[_query]]" disabled="[[_changingPrefs]]"
                      on-commit="_computePrefsChanged" on-keyup="_computePrefsChanged">
                        [[_getOwnerGroup(_serviceUser)]]
                    </gr-autocomplete>
                  </span>
                  <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-click="_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>
