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

<fims-layout-card-over title="{{'Account with value' | translate:{ value: account.identifier } }}" [subTitle]="account.name" [navigateBackTo]="['../../../ledgers/detail', account.ledger]">
  <fims-layout-card-over-header-menu>
    <button mat-icon-button (click)="deleteAccount()" title="{{'Delete this account' | translate}}" *ngIf="canDelete$ | async"><mat-icon>delete</mat-icon></button>
  </fims-layout-card-over-header-menu>
  <fims-two-column-layout>
    <mat-nav-list left>
      <h3 mat-subheader translate>Management</h3>
      <a mat-list-item [routerLink]="['./entries']">
        <mat-icon matListAvatar>assignment</mat-icon>
        <h3 matLine translate>Account entries</h3>
        <p matLine translate>Account entries</p>
      </a>
      <a mat-list-item [routerLink]="['./tasks']">
        <mat-icon matListAvatar>playlist_add_check</mat-icon>
        <h3 matLine translate>Tasks</h3>
        <p matLine translate>Change the status of this account</p>
      </a>
      <a mat-list-item [routerLink]="['./activities']">
        <mat-icon matListAvatar>event</mat-icon>
        <h3 matLine translate>Activities</h3>
        <p matLine translate>Recent activities</p>
      </a>
      <a *ngIf="account.referenceAccount" mat-list-item [routerLink]="['../', account.referenceAccount]">
        <mat-icon matListAvatar>view_module</mat-icon>
        <h3 matLine translate>Reference account</h3>
        <p matLine translate>Navigate to reference account</p>
      </a>
    </mat-nav-list>
    <mat-list right>
      <h3 mat-subheader translate>Current status</h3>
      <fims-state-display [state]="account.state"></fims-state-display>
      <mat-list-item>
        <mat-icon matListAvatar>account_balance</mat-icon>
        <h3 matLine translate>Type</h3>
        <p matLine>{{account.type}}</p>
      </mat-list-item>
      <mat-list-item>
        <mat-icon matListAvatar>payment</mat-icon>
        <h3 matLine translate>Balance</h3>
        <p matLine>{{account.balance | number}}</p>
      </mat-list-item>
    </mat-list>
  </fims-two-column-layout>
</fims-layout-card-over>
<fims-fab-button title="{{'Edit account' | translate}}" icon="mode_edit" [link]="['edit']" [permission]="{ id: 'accounting_accounts', accessLevel: 'CHANGE'}"></fims-fab-button>
