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

<div class="scheduler-dialog" id="dialog-box">
  <header class="dialog-header">
    <h4 class="modal-title">Scheduler
      <span *ngIf="destination">for
        <b *ngIf="destination.type === 'EXPLORATORY'; else resource">{{ destination.name }}</b>
        <ng-template #resource><b>{{ destination.computational_name }}</b></ng-template>
      </span>
    </h4>
    <button type="button" class="close" (click)="dialogRef.close()">&times;</button>
  </header>
  <div class="dialog-content">
    <div *ngIf="destination" class="content-box">
      <form [formGroup]="schedulerForm">
        <div class="enable-schedule">
          <mat-slide-toggle labelPosition="after" [checked]="enableSchedule" (change)="toggleSchedule($event)">
            <span *ngIf="toggleSchedule" class="hold-label">Scheduler by time</span>
          </mat-slide-toggle>
          <div class="idle" *ngIf="destination.image !== 'docker.datalab-dataengine-service'">
              <mat-slide-toggle labelPosition="before" [checked]="enableIdleTime" (change)="toggleIdleTimes($event)">
                  <span *ngIf="toggleSchedule" class="hold-label">Scheduler by inactivity</span>
              </mat-slide-toggle>
          </div>
        </div>

          <div class="note m-bott-10" *ngIf="destination.image !== 'docker.datalab-dataengine-service'">
              NOTE: In case of turning on inactivity time-check, your schedule
              configuration will be decommissioned.
          </div>

        <div class="control-group idle-control" [ngClass]="{ show: enableIdleTimeView }">
          <label class="label">Scheduler by inactivity, min</label>
          <div class="control">
            <input type="text" class="form-control" placeholder="Enter time in min" formControlName="inactivityTime"
              (keypress)="CheckUtils.isNumberKey($event)" (keydown.arrowup)="inactivityCounter($event, 'increment')"
              (keydown.arrowdown)="inactivityCounter($event, 'decrement')" />
            <span class="error" *ngIf="!schedulerForm.controls.inactivityTime.valid">
              <span>The value should be an integer greater than or equal to {{ inactivityLimits.min }} and
                cannot exceed 1 week ({{ inactivityLimits.max }}) in min.</span>
            </span>
          </div>
        </div>
          <div class="schedule-by-time" *ngIf="!enableIdleTimeView" [ngClass]="{ hide: enableIdleTimeView, resource: destination.type === 'СOMPUTATIONAL',
                       des: destination.image === 'docker.datalab-dataengine-service' }">
              <div class="row-wrap" *ngIf="destination.image !== 'docker.datalab-dataengine-service'">
                  <div class="col-3">
                      <mat-form-field>
                          <input matInput [matDatepicker]="startDate" placeholder="Choose start date"
                                 formControlName="startDate">
                          <mat-datepicker-toggle

                                  matSuffix [for]="startDate"
                                  [ngClass]="{'not-allowed' : destination.type === 'СOMPUTATIONAL' && inherit || !enableSchedule }"></mat-datepicker-toggle>
                          <mat-datepicker #startDate></mat-datepicker>
                      </mat-form-field>
                  </div>
                  <div class="col-3">
              <mat-form-field>
                <input matInput [matDatepicker]="finishDate" placeholder="Choose finish date"
                  formControlName="finishDate">
                <mat-datepicker-toggle matSuffix [for]="finishDate" [ngClass]="{'not-allowed' : destination.type === 'СOMPUTATIONAL' && inherit || !enableSchedule }"></mat-datepicker-toggle>
                <mat-datepicker #finishDate ></mat-datepicker>
              </mat-form-field>
            </div>
            <div class="col-3" *ngIf="destination.type === 'СOMPUTATIONAL'; else timezone">
              <mat-form-field>
                <input matInput [matDatepicker]="terminateDate" placeholder="Choose terminate date"
                  formControlName="terminateDate" >
                <mat-datepicker-toggle matSuffix [for]="terminateDate"></mat-datepicker-toggle>
                <mat-datepicker #terminateDate></mat-datepicker>
              </mat-form-field>
            </div>
            <ng-template #timezone>
              <div class="col-3">
                <mat-form-field class="timezone-offset">
                  <mat-select placeholder="Select timezone" [(value)]="tzOffset" panelClass="scrolling timezone-mat-select"
                    [disabled]="destination.type === 'СOMPUTATIONAL' && inherit || !enableSchedule">
                    <mat-option *ngFor="let zone of zones | keys" [value]="zone.key" matTooltip="{{ zone.value }}"
                      matTooltipShowDelay="1000" matTooltipPosition="above"> GMT {{zone.key}} {{ zone.value }}
                    </mat-option>
                  </mat-select>
                </mat-form-field>
              </div>
            </ng-template>
          </div>

              <div class="row-wrap" *ngIf="destination.image !== 'docker.datalab-dataengine-service'">
                  <div class="control-group col-3 time-range">
                      <datalab-time-picker [(pickTime)]="startTime" [(milisecTime)]="startTimeMilliseconds"
                                           [label]="'Choose start time'"
                                           [disable]="destination.type === 'СOMPUTATIONAL' && inherit || !enableSchedule">
                          {{destination.type}}
                      </datalab-time-picker>
                  </div>
                  <div class="control-group col-3 time-range">
                      <datalab-time-picker [(pickTime)]="endTime" [(milisecTime)]="endTimeMilliseconds"
                                           [label]="'Choose finish time'"
                                           [disable]="destination.type === 'СOMPUTATIONAL' && inherit ||!enableSchedule">
                      </datalab-time-picker>
                  </div>
                  <div class="control-group col-3 time-range" *ngIf="destination.type === 'СOMPUTATIONAL'">
                      <datalab-time-picker [(pickTime)]="terminateTime" [(milisecTime)]="terminateTimeMilliseconds"
                                           [label]="'Choose terminate time'"
                                           [disable]="!enableSchedule"></datalab-time-picker>
                  </div>
            <div *ngIf="timeReqiered" class="error term m-bott-10 mt-5"><span>At least one of time range fields
                should be selected</span>
            </div>
            <div *ngIf="terminateDataReqiered">
              <span class="error term m-bott-10 mt-5">Both terminate date and time fields should be selected</span>
            </div>
          </div>

              <div class="row-wrap"
                   *ngIf="destination.type === 'СOMPUTATIONAL' && destination.image !== 'docker.datalab-dataengine-service'">
                  <div class="col-3">
                      <mat-form-field class="timezone-offset">
                          <mat-select placeholder="Select timezone" [(value)]="tzOffset"
                                      [disabled]="destination.type === 'СOMPUTATIONAL' && inherit || !enableSchedule">
                              <mat-option *ngFor="let zone of zones | keys" [value]="zone.key"
                                          matTooltip="{{ zone.value }}"
                                          matTooltipShowDelay="1000" matTooltipPosition="above"> GMT {{zone.key}} {{
                                  zone.value }}
                              </mat-option>
                          </mat-select>
                      </mat-form-field>
                  </div>
          </div>
              <div class="control-group"
                   *ngIf="destination && destination.image !== 'docker.datalab-dataengine-service'">
                  <label class="label repeat" for="options">Repeat on :</label>
                  <div class="days-block">
                      <label>Start date:</label>
                      <mat-button-toggle *ngFor="let day of weekdays; let i = index" value="{{ day }}"
                                         (change)="onDaySelect($event, day, 'start')"
                                         [disabled]="destination.type === 'СOMPUTATIONAL' && inherit || !enableSchedule"
                                         [checked]="selectedStartWeekDays[day.toLowerCase()]">{{ day[0] }}
                      </mat-button-toggle>
                  </div>
                  <div class="days-block">
              <label>Stop date:</label>
              <mat-button-toggle *ngFor="let day of weekdays; let i = index" value="{{ day }}"
                (change)="onDaySelect($event, day, 'stop')"
                [disabled]="destination.type === 'СOMPUTATIONAL' && inherit || !enableSchedule"
                [checked]="selectedStopWeekDays[day.toLowerCase()]">{{ day[0] }}
              </mat-button-toggle>
            </div>
          </div>

              <div class="des-block" *ngIf="destination.image === 'docker.datalab-dataengine-service'">
                  <div class="row-wrap">
                      <div class="col-3">
                          <mat-form-field>
                              <input matInput [matDatepicker]="terminateDate" placeholder="Choose terminate date"
                                     formControlName="terminateDate">
                              <mat-datepicker-toggle matSuffix [for]="terminateDate"></mat-datepicker-toggle>
                              <mat-datepicker #terminateDate></mat-datepicker>
                          </mat-form-field>
                      </div>
                      <div class="control-group col-3 time-range" *ngIf="destination.type === 'СOMPUTATIONAL'">
                          <datalab-time-picker [(pickTime)]="terminateTime" [(milisecTime)]="terminateTimeMilliseconds"
                                               [label]="'Choose terminate time'"
                                               [disable]="!enableSchedule"></datalab-time-picker>
                      </div>
              <div class="col-3">
                <mat-form-field class="timezone-offset">
                  <mat-select placeholder="Select timezone" [(value)]="tzOffset"
                    [disabled]="destination.type === 'СOMPUTATIONAL' && inherit || !enableSchedule">
                    <mat-option *ngFor="let zone of zones | keys" [value]="zone.key" matTooltip="{{ zone.value }}"
                      matTooltipShowDelay="1000" matTooltipPosition="above"> GMT {{zone.key}} {{ zone.value }}
                    </mat-option>
                  </mat-select>
                </mat-form-field>
              </div>
            </div>
            <div *ngIf="terminateDataReqiered">
              <small class="error m-bott-10 mt-5 ">Both terminate date and time fields should be selected</small>
            </div>
          </div>

              <div class="options"
                   *ngIf="destination && allowInheritView && destination.image !== 'docker.datalab-dataengine-service'">
                  <mat-slide-toggle labelPosition="after" [checked]="inherit" (change)="toggleInherit($event)"
                                    [disabled]="!enableSchedule || (!parentInherit && destination.type === 'СOMPUTATIONAL')">
              <span *ngIf="destination.type === 'EXPLORATORY'; else resourcePropagation" class="hold-label">
                <span>Start all spark clusters associated with current notebook based on notebook start
                  schedule</span>
              </span>
                      <ng-template #resourcePropagation>
                          <span class="hold-label">Inherit notebook schedule settings</span>
                      </ng-template>
                  </mat-slide-toggle>
          </div>
        </div>

        <div class="options" *ngIf="destination.type === 'EXPLORATORY'">
          <mat-slide-toggle labelPosition="after" [checked]="considerInactivity"
            [disabled]="!enableSchedule && !enableIdleTime" (change)="considerInactivity = !considerInactivity">
            <span class="hold-label">
              <span>In case of running jobs on Spark standalone, notebook stop scheduler will not be triggered</span>
            </span>
          </mat-slide-toggle>
        </div>

      </form>
      <div class="text-center m-top-30">
        <button mat-raised-button type="button" class="butt action" (click)="dialogRef.close()">Cancel</button>
        <button mat-raised-button type="button" class="butt butt-success action"
          [disabled]="enableIdleTime && !schedulerForm.controls.inactivityTime.valid"
          (click)="scheduleInstance_btnClick()">Save</button>
      </div>
    </div>
  </div>
</div>
