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

<link rel="import" href="../../../behaviors/base-url-behavior/base-url-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">

<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../gr-account-dropdown/gr-account-dropdown.html">
<link rel="import" href="../../shared/gr-dropdown/gr-dropdown.html">
<link rel="import" href="../gr-search-bar/gr-search-bar.html">

<dom-module id="gr-main-header">
  <template>
    <style>
      :host {
        display: block;
      }
      nav {
        align-items: center;
        display: flex;
      }
      .bigTitle {
        color: var(--primary-text-color);
        font-size: 1.75em;
        text-decoration: none;
      }
      .bigTitle:hover {
        text-decoration: underline;
      }
      .bigTitle::before {
        background-image: var(--header-icon);
        background-size: var(--header-icon-size) var(--header-icon-size);
        content: "";
        display: inline-block;
        height: var(--header-icon-size);
        margin: 0 .25em 0 0;
        vertical-align: text-bottom;
        width: var(--header-icon-size);
      }
      .bigTitle::after {
        content: var(--header-title-content);
      }
      ul {
        list-style: none;
      }
      .links > li {
        cursor: default;
        display: inline-block;
        margin-left: 1em;
        padding: 0;
        position: relative;
      }
      .linksTitle {
        color: var(--primary-text-color);
        display: inline-block;
        position: relative;
      }
      .rightItems {
        align-items: center;
        display: flex;
        flex: 1;
        justify-content: flex-end;
      }
      gr-search-bar {
        flex-grow: 1;
        margin-left: .5em;
        max-width: 500px;
      }
      .accountContainer:not(.loggedIn):not(.loggedOut) .loginButton,
      .accountContainer:not(.loggedIn):not(.loggedOut) gr-account-dropdown,
      .accountContainer.loggedIn .loginButton,
      .accountContainer.loggedOut gr-account-dropdown {
        display: none;
      }
      .accountContainer {
        align-items: center;
        display: flex;
        margin-left: var(--default-horizontal-margin);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
      }
      .dropdown-trigger {
        text-decoration: none;
      }
      .dropdown-content {
        background-color: #fff;
        box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
      }
      @media screen and (max-width: 50em) {
        .bigTitle {
          font-size: 14px;
          font-weight: bold;
        }
        gr-search-bar {
          display: none;
        }
        .accountContainer {
          margin-left: .5em !important;
        }
      }
    </style>
    <nav>
      <a href$="[[_computeRelativeURL('/')]]" class="bigTitle"></a>
      <ul class="links">
        <template is="dom-repeat" items="[[_links]]" as="linkGroup">
          <li>
          <gr-dropdown
              link
              down-arrow
              items = [[linkGroup.links]]
              horizontal-align="left">
            <span class="linksTitle" id="[[linkGroup.title]]">
              [[linkGroup.title]]
            </span>
          </gr-dropdown>
          </li>
        </template>
      </ul>
      <div class="rightItems">
        <gr-search-bar value="{{searchQuery}}" role="search"></gr-search-bar>
        <div class="accountContainer" id="accountContainer">
          <a class="loginButton" href$="[[_loginURL]]" on-tap="_loginTapHandler">Sign in</a>
          <gr-account-dropdown account="[[_account]]"></gr-account-dropdown>
        </div>
      </div>
    </nav>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-main-header.js"></script>
</dom-module>
