<!--
  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="{{'View debt income ratio' | translate}}" [navigateBackTo]="['../']">
  <mat-tab-group>
    <mat-tab label="Member(Ratio: {{customerOverview.ratio ? (customerOverview.ratio | number:numberFormat) : '-'}})" *ngIf="customerOverview$ | async as customerOverview">
      <div class="mat-content inset" flex>
        <h5>Debts(Total: {{customerOverview.debtTotal | number:numberFormat}})</h5>
        <fims-data-table flex
                         [columns]="columns"
                         [data]="customerOverview.debtTableData"
                         [actionColumn]="false">
        </fims-data-table>
        <h5>Income(Total: {{customerOverview.incomeTotal | number:numberFormat}})</h5>
        <fims-data-table flex
                         [columns]="columns"
                         [data]="customerOverview.incomeTableData"
                         [actionColumn]="false">
        </fims-data-table>
      </div>
    </mat-tab>
    <mat-tab label="Co-signer(Ratio: {{cosignerOverview.ratio ? (cosignerOverview.ratio | number:numberFormat) : '-'}})" *ngIf="cosignerOverview$ | async as cosignerOverview">
      <div class="mat-content inset" flex>
        <h5>Debts(Total: {{cosignerOverview.debtTotal | number:numberFormat}})</h5>
        <fims-data-table flex
                         [columns]="columns"
                         [data]="cosignerOverview.debtTableData"
                         [actionColumn]="false">
        </fims-data-table>
        <h5>Income(Total: {{cosignerOverview.incomeTotal | number:numberFormat}})</h5>
        <fims-data-table flex
                         [columns]="columns"
                         [data]="cosignerOverview.incomeTableData"
                         [actionColumn]="false">
        </fims-data-table>
      </div>
    </mat-tab>
  </mat-tab-group>
</fims-layout-card-over>
