<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You 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.
-->

<mat-progress-spinner id="loading-spinner" *ngIf="nfRegistryService.inProgress" mode="indeterminate"></mat-progress-spinner>
<mat-sidenav-container>
    <mat-sidenav #sidenav mode="over" align="end" opened="false" disableClose="true">
        <router-outlet name="sidenav"></router-outlet>
    </mat-sidenav>
    <div id="nf-registry-app-container">
        <mat-toolbar id="nifi-registry-toolbar">
            <img id="nifi-registry-logo" src="nifi-registry/images/registry-logo-web-app.svg">
            <div *ngIf="nfRegistryService.perspective !== 'login' && nfRegistryService.perspective !== 'not-found'" fxFlex="1 1 auto" class="pad-left-xl" [@flyInOut]="nfRegistryService.breadCrumbState">
                <span class="pointer" routerLink="/nifi-registry/explorer/{{(nfRegistryService.explorerViewType) ? nfRegistryService.explorerViewType : 'grid-list'}}">{{nfRegistryService.registry.name}}</span>
                <mat-menu #availableRegistriesMenu="matMenu" [overlapTrigger]="false">
                    <button mat-menu-item *ngFor="let registry of nfRegistryService.registries"
                            routerLink="/nifi-registry/explorer/{{(nfRegistryService.explorerViewType) ? nfRegistryService.explorerViewType : 'grid-list'}}">
                        <span>{{registry.name}}</span>
                    </button>
                </mat-menu>
                <span class="pointer" *ngIf="nfRegistryService.perspective === 'administration'"> / Administration</span>
                <span class="pointer" *ngIf="(nfRegistryService.perspective === 'explorer') && nfRegistryService.bucket.identifier"
                      [matMenuTriggerFor]="availableBucketsMenu"> / {{nfRegistryService.bucket.name}}<i
                        class="fa fa-caret-down pad-left-sm" aria-hidden="true"></i></span>
                <span class="pointer" *ngIf="nfRegistryService.perspective === 'explorer' && !nfRegistryService.bucket.identifier"
                      [matMenuTriggerFor]="availableBucketsMenu"> / All<i class="fa fa-caret-down pad-left-sm"
                                                                          aria-hidden="true"></i></span>
                <mat-menu #availableBucketsMenu="matMenu" [overlapTrigger]="false">
                    <button mat-menu-item
                            routerLink="/nifi-registry/explorer/{{(nfRegistryService.explorerViewType) ? nfRegistryService.explorerViewType : 'grid-list'}}">
                        <span>All buckets</span>
                    </button>
                    <button mat-menu-item *ngFor="let bucket of nfRegistryService.buckets"
                            routerLink="/nifi-registry/explorer/{{(nfRegistryService.explorerViewType) ? nfRegistryService.explorerViewType : 'grid-list'}}/buckets/{{bucket.identifier}}">
                        <span>{{bucket.name}}</span>
                    </button>
                </mat-menu>
                <span class="pointer" *ngIf="nfRegistryService.perspective === 'explorer' && nfRegistryService.droplet.identifier"
                      [matMenuTriggerFor]="availableDropletsMenu"> / {{nfRegistryService.droplet.name}}<i
                        class="fa fa-caret-down pad-left-sm" aria-hidden="true"></i></span>
                <span class="pointer" [matMenuTriggerFor]="availableDropletsMenu"
                      *ngIf="nfRegistryService.perspective === 'explorer' && nfRegistryService.bucket.identifier && !nfRegistryService.droplet.identifier"> / All<i
                        class="fa fa-caret-down pad-left-sm" aria-hidden="true"></i></span>
                <mat-menu #availableDropletsMenu="matMenu" [overlapTrigger]="false">
                    <button mat-menu-item
                            routerLink="/nifi-registry/explorer/{{(nfRegistryService.explorerViewType) ? nfRegistryService.explorerViewType : 'grid-list'}}/buckets/{{nfRegistryService.bucket.identifier}}">
                        <span>All resources</span>
                    </button>
                    <button mat-menu-item *ngFor="let droplet of nfRegistryService.droplets"
                            routerLink="/nifi-registry/explorer/{{(nfRegistryService.explorerViewType) ? nfRegistryService.explorerViewType : 'grid-list'}}/{{droplet.link.href}}">
                        <span>{{droplet.name}}</span>
                    </button>
                </mat-menu>
            </div>
            <div id="nifi-registry-alerts-count" *ngIf="nfRegistryService.alerts.length > 0">
                {{nfRegistryService.alerts.length}}
            </div>
            <button *ngIf="false" matTooltip="Alerts" mat-icon-button>
                <i class="fa fa-bell" aria-hidden="true"></i>
            </button>
            <div *ngIf="nfRegistryService.currentUser.identity && nfRegistryService.perspective !== 'login' && nfRegistryService.perspective !== 'not-found'" fxLayout="column" fxLayoutAlign="space-around end" class="push-right-sm">
                <div id="current-user" matTooltip="{{nfRegistryService.currentUser.identity}}">{{nfRegistryService.currentUser.identity}}</div>
                <a id="logout-link-container" *ngIf="nfRegistryService.currentUser.canLogout" class="link" (click)="logout()">logout</a>
            </div>
            <div id="nifi-registry-documentation" class="pad-right-sm">
                <a [matTooltip]="'Help'" href="{{nfRegistryService.documentation.link}}" target="_blank"><i class="fa fa-question-circle help-icon" aria-hidden="true"></i></a>
            </div>
            <button [matTooltip]="'Settings'" mat-ripple *ngIf="nfRegistryService.currentUser.resourcePermissions.anyTopLevelResource.canRead && nfRegistryService.perspective === 'explorer'" mat-icon-button
                    routerLink="/nifi-registry/administration/workflow">
                <i class="fa fa-wrench" aria-hidden="true"></i>
            </button>
            <button [matTooltip]="'Close settings.'" mat-ripple *ngIf="nfRegistryService.perspective === 'administration'" mat-mini-fab
                    routerLink="/nifi-registry/explorer/{{(nfRegistryService.explorerViewType) ? nfRegistryService.explorerViewType : 'grid-list'}}">
                <mat-icon color="primary">close</mat-icon>
            </button>
        </mat-toolbar>
        <div id="nf-registry-perspectives-container">
            <router-outlet></router-outlet>
        </div>
    </div>
</mat-sidenav-container>
