/**
 * @license
 * Copyright (C) 2020 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.
 */
import '../gr-hovercard/gr-hovercard-shared-style.js';
import {html} from '@polymer/polymer/lib/utils/html-tag.js';

export const htmlTemplate = html`
  <style include="gr-hovercard-shared-style">
    .top,
    .attention,
    .status,
    .voteable {
      padding: var(--spacing-s) var(--spacing-l);
    }
    .top {
      display: flex;
      padding-top: var(--spacing-xl);
      min-width: 300px;
    }
    gr-avatar {
      height: 48px;
      width: 48px;
      margin-right: var(--spacing-l);
    }
    .title,
    .email {
      color: var(--deemphasized-text-color);
    }
    .status iron-icon {
      width: 14px;
      height: 14px;
      vertical-align: top;
      position: relative;
      top: 2px;
    }
    .action {
      border-top: 1px solid var(--border-color);
      padding: var(--spacing-s) var(--spacing-l);
      --gr-button: {
        padding: var(--spacing-s) 0;
      }
    }
    :host(:not([attention])) .attention {
      display: none;
    }
    .attention {
      background-color: var(--emphasis-color);
    }
    .attention iron-icon {
      vertical-align: top;
    }
  </style>
  <div id="container" role="tooltip" tabindex="-1">
    <div class="top">
      <div class="avatar">
        <gr-avatar account="[[account]]" image-size="56"></gr-avatar>
      </div>
      <div class="account">
        <h3 class="name">[[account.name]]</h3>
        <div class="email">[[account.email]]</div>
      </div>
    </div>
    <template is="dom-if" if="[[account.status]]">
      <div class="status">
        <span class="title">
          <iron-icon icon="gr-icons:calendar"></iron-icon>
          Status:
        </span>
        <span class="value">[[account.status]]</span>
      </div>
    </template>
    <template is="dom-if" if="[[voteableText]]">
      <div class="voteable">
        <span class="title">Voteable:</span>
        <span class="value">[[voteableText]]</span>
      </div>
    </template>
    <div class="attention">
      <iron-icon icon="gr-icons:attention"></iron-icon>
      <span>It is this user's turn to take action.</span>
    </div>
  </div>
`;
