/**
 * @license
 * Copyright (C) 2016 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.
 */
(function() {
  'use strict';

  Polymer({
    is: 'gr-account-label',

    properties: {
      /**
       * @type {{ name: string, status: string }}
       */
      account: Object,
      avatarImageSize: {
        type: Number,
        value: 32,
      },
      title: {
        type: String,
        reflectToAttribute: true,
        computed: '_computeAccountTitle(account, additionalText)',
      },
      additionalText: String,
      hasTooltip: {
        type: Boolean,
        reflectToAttribute: true,
        computed: '_computeHasTooltip(account)',
      },
      hideAvatar: {
        type: Boolean,
        value: false,
      },
      _serverConfig: {
        type: Object,
        value: null,
      },
    },

    behaviors: [
      Gerrit.AnonymousNameBehavior,
      Gerrit.TooltipBehavior,
    ],

    ready() {
      if (!this.additionalText) { this.additionalText = ''; }
      this.$.restAPI.getConfig()
          .then(config => { this._serverConfig = config; });
    },

    _computeName(account, config) {
      return this.getUserName(config, account, false);
    },

    _computeAccountTitle(account, tooltip) {
      if (!account) { return; }
      let result = '';
      if (this._computeName(account, this._serverConfig)) {
        result += this._computeName(account, this._serverConfig);
      }
      if (account.email) {
        result += ' <' + account.email + '>';
      }
      if (this.additionalText) {
        return result + ' ' + this.additionalText;
      }
      return result;
    },

    _computeShowEmailClass(account) {
      if (!account || account.name || !account.email) { return ''; }
      return 'showEmail';
    },

    _computeEmailStr(account) {
      if (!account || !account.email) {
        return '';
      }
      if (account.name) {
        return '(' + account.email + ')';
      }
      return account.email;
    },

    _computeHasTooltip(account) {
      // If an account has loaded to fire this method, then set to true.
      return !!account;
    },
  });
})();
