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

<td-steps mode="'vertical'">
  <td-step #confirmationStep label="{{'Confirmation' | translate}}" [active]="true">
    <div layout="row" [formGroup]="formGroup">
      <mat-form-field layout-margin flex>
        <textarea matInput placeholder="{{'Note(optional)' | translate}}" formControlName="note"></textarea>
      </mat-form-field>
    </div>
    <div layout-gt-xs="column">
      <h4 translate>Principal amount: {{fimsCase?.parameters?.maximumBalance | number:numberFormat}}</h4>
      <h3 translate>Costs</h3>
      <table td-data-table>
        <thead>
          <tr td-data-table-column-row>
            <th td-data-table-column>
              <span translate>Name</span>
            </th>
            <th td-data-table-column>
              <span translate>Description</span>
            </th>
            <th td-data-table-column>
              <span translate>Amount</span>
            </th>
          </tr>
        </thead>
        <tbody>
          <tr td-data-table-row *ngFor="let row of fees">
            <td td-data-table-cell>
              {{row['name']}}
            </td>
            <td td-data-table-cell>
              {{row['description']}}
            </td>
            <td td-data-table-cell>
              {{row['amount'] | number:numberFormat}}
            </td>
          </tr>
          <tr td-data-table-row>
            <td td-data-table-cell translate colspan="2">Total</td>
            <td td-data-table-cell>{{totalAmount | number:numberFormat}}</td>
          </tr>
        </tbody>
      </table>
    </div>
  </td-step>
  <td-step label="{{'Final step' | translate}}" [state]="'complete'">
    <ng-template td-step-summary>
      <button mat-raised-button color="primary" (click)="executeCommand()">{{action | translate}}</button>
      <span flex></span>
      <button mat-button (click)="cancel()">{{'CANCEL' | translate}}</button>
    </ng-template>
  </td-step>
</td-steps>
