<!--
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/assets/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" *ngIf="nfRegistryService.perspective !== 'login'" 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>
