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

<form nz-form nzLayout="vertical">
  <nz-form-item>
    <nz-form-label>
      @if (cloneNote) {
        Clone Note
      } @else {
        Note Name
      }
    </nz-form-label>
    <nz-form-control>
      <input nz-input [(ngModel)]="noteName" autofocus placeholder="Insert Note Name" name="noteName" />
    </nz-form-control>
  </nz-form-item>
  @if (!cloneNote) {
    <nz-form-item>
      <nz-form-label>Default Interpreter</nz-form-label>
      <nz-form-control>
        <nz-select
          [(ngModel)]="defaultInterpreter"
          name="defaultInterpreter"
          nzPlaceHolder="Insert Default Interpreter"
          nzShowSearch
        >
          @for (i of listOfInterpreter; track i) {
            <nz-option [nzValue]="i.name" [nzLabel]="i.name"></nz-option>
          }
        </nz-select>
      </nz-form-control>
    </nz-form-item>
  }
  <nz-form-item>
    <nz-form-control>
      <nz-alert nzType="info" nzMessage="Use '/' to create folders. Example: /NoteDirA/Note1"></nz-alert>
    </nz-form-control>
  </nz-form-item>

  <div class="modal-footer ant-modal-footer">
    <button nz-button nzType="primary" (click)="createNote()">
      @if (cloneNote) {
        Clone
      } @else {
        Create
      }
    </button>
  </div>
</form>
