<!--
  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 #detailsStep label="{{'Fee details' | translate}}" [state]="detailForm.valid ? 'complete' : detailForm.pristine ? 'none' : 'required'" [active]="true">
    <form [formGroup]="detailForm" layout="column">
      <fims-id-input [form]="detailForm" controlName="identifier" [readonly]="editMode"></fims-id-input>
      <fims-text-input [form]="detailForm" controlName="name" placeholder="{{'Name' | translate}}"></fims-text-input>
      <mat-form-field layout-margin flex>
        <textarea matInput placeholder="{{'Description' | translate}}" formControlName="description"></textarea>
        <mat-error *ngIf="detailForm.get('description').hasError('required')" translate>
          Required
        </mat-error>
      </mat-form-field>
      <div layout="row">
        <fims-text-input type="number" [form]="detailForm" controlName="amount" placeholder="{{'Amount' | translate}}"></fims-text-input>
        <mat-radio-group formControlName="chargeMethod">
          <mat-radio-button *ngFor="let basis of chargeMethodOptions" [value]="basis.type" layout-margin>
            {{basis.label}}
          </mat-radio-button>
        </mat-radio-group>
        <mat-form-field layout-margin>
          <mat-select formControlName="proportionalTo" placeholder="{{ 'Proportional to' | translate }}">
            <mat-option *ngFor="let proportionalTo of proportionalToOptions" [value]="proportionalTo.designator">
              {{proportionalTo.label}}
            </mat-option>
          </mat-select>
        </mat-form-field>
      </div>
      <mat-slide-toggle formControlName="rangeEnabled" layout-margin translate layout-margin>
        Apply amount only within range?
      </mat-slide-toggle>
      <ng-container *ngIf="detailForm.get('rangeEnabled').value === true">
        <mat-form-field layout-margin>
          <mat-select formControlName="rangeIdentifier" placeholder="{{ 'Select range' | translate }}">
            <mat-option *ngFor="let range of ranges" [value]="range.identifier">
              {{range.identifier}}
            </mat-option>
          </mat-select>
        </mat-form-field>
        <mat-form-field layout-margin>
          <mat-select formControlName="rangeSegmentIdentifier" placeholder="{{ 'Select range segment' | translate }}">
            <mat-option *ngFor="let segment of selectedRange?.segments" [value]="segment.identifier">
              {{segment.identifier}}({{segment.start | number:numberFormat}} - {{segment.end | number:numberFormat}})
            </mat-option>
          </mat-select>
        </mat-form-field>
      </ng-container>
    </form>
    <ng-template td-step-actions>
      <fims-form-final-action
        [resourceName]="'FEE'"
        [editMode]="editMode"
        [disabled]="!detailForm.valid"
        (onCancel)="cancel()"
        (onSave)="save()">
      </fims-form-final-action>
    </ng-template>
  </td-step>
</td-steps>
