<!--
  ~ 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="managment-wrapper scrolling" #pageWrapper (scroll)="scrollTable($event)" (resize)="onResize($event)">
  <div class="ani scrolling scroll-wrapper" #wrapper (scroll)="scrollTable($event)">
    <div class="wrapper" #tableWrapper >
      <table mat-table [dataSource]="allFilteredEnvironmentData" class="data-grid management mat-elevation-z6" #table >
      <ng-container matColumnDef="checkbox">
        <th mat-header-cell *matHeaderCellDef class="checkbox label-header">
          <datalab-checkbox
            class="header-checkbox"
            *ngIf="allActiveNotebooks?.length"
            [checked]="selected?.length === allActiveNotebooks?.length"
            (toggleSelection)="toggleSelectionAll()"
          ></datalab-checkbox>
          <button mat-icon-button aria-label="More" class="ar checkbox-border" (click)="toggleFilterRow()">
            <i class="material-icons">
              <!-- <span *ngIf="filtering && filterForm.users.length > 0 && !collapsedFilterRow">filter_list</span> -->
              <span>more_vert</span>
            </i>
          </button>
        </th>
        <td mat-cell *matCellDef="let element">
          <ng-template 
            [ngIf]="element.type !== 'odahu' 
                  && element.type !== 'edge node' 
                  && (element.status==='running' || element.status==='stopped') 
                  && !clustersInProgress(element.resources)"
          >
            <datalab-checkbox
              [checked]="element.isSelected"
              (toggleSelection)="toggleActionForAll(element)"
            ></datalab-checkbox>
          </ng-template>
        </td>
      </ng-container>

      <ng-container matColumnDef="user">
        <th mat-header-cell *matHeaderCellDef class="user label-header">
          <span class="label">User</span>
          <button 
            mat-icon-button 
            aria-label="More" 
            class="ar" 
            (click)="toggleFilterRow()"
          >
            <i class="material-icons">
              <span *ngIf="filtering && filterForm.users.length > 0 && !collapsedFilterRow">filter_list</span>
              <span [hidden]="filtering && filterForm.users.length > 0 && !collapsedFilterRow">more_vert</span>
            </i>
          </button>
        </th>
        <td
          mat-cell *matCellDef="let element"
          class="user-name ellipsis"
          matTooltip="{{element.user}}"
          matTooltipPosition="above"
          [matTooltipDisabled]="element.user?.length<30"
        >
          <span >{{ element.user }}</span>
        </td>
      </ng-container>

      <ng-container matColumnDef="project">
        <th mat-header-cell *matHeaderCellDef class="project label-header">
          <span class="label">Project</span>
          <button 
            mat-icon-button 
            aria-label="More" 
            class="ar" 
            (click)="toggleFilterRow()"
          >
            <i class="material-icons">
              <span *ngIf="filtering && filterForm.projects.length > 0 && !collapsedFilterRow">filter_list</span>
              <span [hidden]="filtering && filterForm.projects.length > 0 && !collapsedFilterRow">more_vert</span>
            </i>
          </button> 
        </th>
        <td mat-cell *matCellDef="let element">{{ element.project }}</td>
      </ng-container>

      <ng-container matColumnDef="endpoint">
        <th mat-header-cell *matHeaderCellDef class="endpoint label-header">
          <span class="label">Endpoint</span>
          <button 
            mat-icon-button 
            aria-label="More" 
            class="ar" 
            (click)="toggleFilterRow()"
          >
            <i class="material-icons">
              <span *ngIf="filtering && filterForm.endpoints.length > 0 && !collapsedFilterRow">filter_list</span>
              <span [hidden]="filtering && filterForm.endpoints.length > 0 && !collapsedFilterRow">more_vert</span>
            </i>
          </button>
        </th>
        <td mat-cell *matCellDef="let element">{{ element.endpoint }}</td>
      </ng-container>

      <ng-container matColumnDef="type">
        <th mat-header-cell *matHeaderCellDef class="type label-header">
          <span class="label">Name</span>
          <button 
            mat-icon-button 
            aria-label="More" 
            class="ar" 
            (click)="toggleFilterRow()"
          >
            <i class="material-icons">
              <span *ngIf="filtering && filterForm.type.length > 0 && !collapsedFilterRow">filter_list</span>
              <span [hidden]="filtering && filterForm.type.length > 0 && !collapsedFilterRow">more_vert</span>
            </i>
          </button>
        </th>
        <td type mat-cell *matCellDef="let element">
          <span
            *ngIf="element.name"
            [ngClass]="{'computation': element.exploratory_urls?.length}"
            (click)="openNotebookDetails(element)"
          >
            {{element.name}}
          </span>
          <span *ngIf="!element.name">{{element.type}}</span>
        </td>
      </ng-container>

      <ng-container matColumnDef="shape">
        <th mat-header-cell *matHeaderCellDef class="shape label-header">
          <span class="label">Shape / Resource id</span>
          <button 
            mat-icon-button 
            aria-label="More" 
            class="ar" 
            (click)="toggleFilterRow()"
          >
            <i class="material-icons">
              <span *ngIf="filtering && filterForm.shapes.length > 0 && !collapsedFilterRow">filter_list</span>
              <span [hidden]="filtering && filterForm.shapes.length > 0 && !collapsedFilterRow">more_vert</span>
            </i>
          </button>
        </th>
        <td mat-cell *matCellDef="let element" class="shape">
          <div>{{ element.shape || element.ip }}</div>
          <div *ngIf="element.gpu_type">{{ element.gpu_type }}</div>
          <div *ngIf="element.gpu_count">GPU count: {{ element.gpu_count }}</div>
        </td>
      </ng-container>

      <ng-container matColumnDef="status">
        <th mat-header-cell *matHeaderCellDef class="status label-header">
          <span class="label">Status</span>
          <button 
            mat-icon-button 
            aria-label="More" 
            class="ar" 
            (click)="toggleFilterRow()"
          >
            <i class="material-icons">
              <span *ngIf="filtering && filterForm.statuses.length > 0 && !collapsedFilterRow">filter_list</span>
              <span [hidden]="filtering && filterForm.statuses.length > 0 && !collapsedFilterRow">more_vert</span>
            </i>
          </button>
        </th>
        <td mat-cell *matCellDef="let element" class="ani status" >
          <span ngClass="{{element.status || ''}}">{{ element.status }}</span>
        </td>
      </ng-container>

      <ng-container matColumnDef="resources">
        <th mat-header-cell *matHeaderCellDef class="resources label-header">
          <span class="label">Compute</span>
          <button 
            mat-icon-button 
            aria-label="More" 
            class="ar" 
            (click)="toggleFilterRow()"
          >
            <i class="material-icons">
              <span *ngIf="filtering && filterForm.resources.length > 0 && !collapsedFilterRow">filter_list</span>
              <span [hidden]="filtering && filterForm.resources.length > 0 && !collapsedFilterRow">more_vert</span>
            </i>
          </button>
        </th>
        <td mat-cell *matCellDef="let element" class="ani resources">
          <div class="source" *ngIf="element.resources">
            <div *ngIf="!element.resources?.length">
              <span *ngIf="!element.resources.length" class="no-details">no details</span>
            </div>
            <div *ngIf="element.resources?.length">
              <div *ngFor="let resource of element.resources" class="resource-wrap">
                <div class="resource-name">
                  <a>{{ resource.computational_name }}</a>
                </div>
                <span ngClass="{{resource.status || ''}}" class="resource-status">{{ resource.status }}</span>
                <div class="resource-actions">
                  <span class="not-allow">
                    <a class="start-stop-action" *ngIf="resource.image === 'docker.datalab-dataengine'">
                      <i 
                        class="material-icons" 
                        (click)="toggleResourceAction(element, 'stop', resource)"
                        [ngClass]="{'not-allowed' : resource.status !== 'running' || selected?.length }"
                      >
                        pause_circle_outline
                      </i>
                    </a>
                  </span>
                  <span class="not-allow">
                    <a 
                      class="remove_butt" 
                      (click)="toggleResourceAction(element, 'terminate', resource)"
                      [ngClass]="{ 'disabled' : element.status !== 'running' || (resource.status !== 'running' && resource.status !== 'stopped') || selected?.length }"
                    >
                      <i class="material-icons">highlight_off</i>
                    </a>
                  </span>
                </div>
              </div>
            </div>
          </div>
        </td>
      </ng-container>

      <ng-container matColumnDef="actions">
        <th mat-header-cell *matHeaderCellDef class="actions label-header">
          <span class="label"> Actions </span>
        </th>
        <td mat-cell *matCellDef="let element" class="settings actions-col">
          <span [ngClass]="{'not-allow' : selected?.length}">
            <span 
              #settings 
              class="actions" 
              (click)="actions.toggle($event, settings)" 
              *ngIf="element.type !== 'edge node' && element.type !== 'odahu'"
              [ngClass]="{
                'disabled' : (element.status !== 'running' && element.status !== 'stopped')
                          || selected?.length || inProgress(element.resources)}"
            >
            </span>
          </span>
          <bubble-up #actions class="list-menu" position="bottom-left" alternative="top-left">
            <ul class="list-unstyled">
              <li
                matTooltip="{{ element.type !== 'edge node' 
                  ? 'Unable to stop notebook because at least one computational resource is in progress' 
                  : 'Unable to stop edge node because at least one resource of this user is in progress' }}"
                matTooltipPosition="above" 
                [matTooltipDisabled]="!isResourcesInProgress(element)"
                [hidden]="element.name === 'edge node' && element.status === 'stopped'"
              >
                <div 
                  (click)="toggleResourceAction(element, 'stop')"
                  [ngClass]="{'not-allowed' : element.status === 'stopped' || element.status === 'stopping' || 
                                              element.status === 'starting' || element.status === 'creating image' || 
                                              element.status === 'failed' || isResourcesInProgress(element)}"
                >
                  <i class="material-icons">pause_circle_outline</i>
                  <span>Stop</span>
                </div>
              </li>
              <li 
                *ngIf="element.name !== 'edge node'"
                matTooltip="Unable to terminate notebook because at least one compute is in progress"
                matTooltipPosition="above" 
                [matTooltipDisabled]="!isResourcesInProgress(element)"
              >
                <div 
                  (click)="toggleResourceAction(element, 'terminate')"
                  [ngClass]="{'not-allowed' : element.status !== 'running' && 
                                              element.status !== 'stopped' || 
                                              isResourcesInProgress(element)}"
                >
                  <i class="material-icons">phonelink_off</i>
                  <span>Terminate</span>
                </div>
              </li>

              <div *ngIf="element.name === 'edge node' && element.status === 'stopped'">
                <li (click)="toggleResourceAction(element, 'run')">
                  <i class="material-icons">play_circle_outline</i>
                  <span>Start</span>
                </li>
              </div>
            </ul>
          </bubble-up>
        </td>
      </ng-container>


      <!-- FILTERING -->
      <ng-container matColumnDef="checkbox-filter" sticky>
        <th mat-header-cell *matHeaderCellDef class="filter-row-item"></th>
      </ng-container>

      <ng-container matColumnDef="user-filter" sticky>
        <th mat-header-cell *matHeaderCellDef class="filter-row-item">
          <multi-select-dropdown 
            (selectionChange)="onUpdate($event)" 
            [type]="'users'" 
            [items]="filterConfiguration.users"
            [model]="filterForm.users"
          ></multi-select-dropdown>
        </th>
      </ng-container>

      <ng-container matColumnDef="type-filter" sticky>
        <th mat-header-cell *matHeaderCellDef class="filter-row-item">
          <input 
            placeholder="Filter by name" 
            type="text" 
            class="form-control filter-field"
            [value]="filterForm.type" 
            (input)="onFilterNameUpdate($event.target['value'])"
          />
        </th>
      </ng-container>

      <ng-container matColumnDef="project-filter" sticky>
        <th mat-header-cell *matHeaderCellDef class="filter-row-item">
          <multi-select-dropdown 
            (selectionChange)="onUpdate($event)" 
            [type]="'projects'"
            [items]="filterConfiguration.projects" 
            [model]="filterForm.projects"
          ></multi-select-dropdown>
        </th>
      </ng-container>
      <ng-container matColumnDef="endpoint-filter" sticky>
        <th mat-header-cell *matHeaderCellDef class="filter-row-item">
          <multi-select-dropdown 
            (selectionChange)="onUpdate($event)" 
            [type]="'endpoints'"
            [items]="filterConfiguration.endpoints" 
            [model]="filterForm.endpoints"
          ></multi-select-dropdown>
        </th>
      </ng-container>

      <ng-container matColumnDef="shape-filter" sticky>
        <th mat-header-cell *matHeaderCellDef class="filter-row-item">
          <multi-select-dropdown 
            (selectionChange)="onUpdate($event)" 
            [type]="'shapes'"
            [items]="filterConfiguration.shapes" 
            [model]="filterForm.shapes"
          ></multi-select-dropdown>
        </th>
      </ng-container>

      <ng-container matColumnDef="status-filter" sticky>
        <th mat-header-cell *matHeaderCellDef class="filter-row-item">
          <multi-select-dropdown 
            (selectionChange)="onUpdate($event)" 
            [type]="'statuses'"
            [items]="filterConfiguration.statuses" 
            [model]="filterForm.statuses"
          ></multi-select-dropdown>
        </th>
      </ng-container>

      <ng-container matColumnDef="resource-filter" sticky>
        <th mat-header-cell *matHeaderCellDef class="filter-row-item">
          <multi-select-dropdown 
            (selectionChange)="onUpdate($event)" 
            [type]="'resources'"
            [items]="filterConfiguration.resources" 
            [model]="filterForm.resources"
          ></multi-select-dropdown>
        </th>
      </ng-container>

      <ng-container matColumnDef="actions-filter" sticky>
        <th mat-header-cell *matHeaderCellDef  class="actions-col filter-row-item">
          <div class="actions">
            <button 
              mat-icon-button 
              class="btn reset" 
              (click)="resetFilterConfigurations()" 
              [disabled]="!isFilterSelected"
            >
              <i class="material-icons">close</i>
            </button>

            <button 
              mat-icon-button 
              class="btn apply" 
              (click)="applyFilter(filterForm)"
              [disabled]="isFilterChanged"
            >
              <i 
                class="material-icons"
                [ngClass]="{'not-allowed': allFilteredEnvironmentData?.length == 0 && !filtering}"
              >
                done
              </i>
            </button>
          </div>
        </th>
      </ng-container>

      <ng-container matColumnDef="placeholder">
        <td mat-footer-cell *matFooterCellDef colspan="8">
          <div 
            class="info"
            *ngIf="(!allFilteredEnvironmentData) && !filtering || (allFilteredEnvironmentData?.length == 0) && !filtering"
          >
            To start working, please, create new environment
          </div>
          <div *ngIf="(allFilteredEnvironmentData?.length == 0) && filtering" class="info">No matches found</div>
        </td>
      </ng-container>

      <ng-container matColumnDef="scrollButtons">
        <td 
          mat-footer-cell 
          *matFooterCellDef 
          colspan="9" 
          class="buttons-wrap"
        >
          <div 
            class="buttons" 
            [ngStyle]="{'width.px': tableWrapperWidth }" 
            [hidden]="!tableWrapperWidth"
          >
            <div class="button-container">
              <button 
                mat-mini-fab aria-label="Scroll left"
                (click)="sctollTo('left')"
                [ngClass]="{'not-allowed': wrapper.scrollLeft === 0 }"
              >
                <mat-icon [ngClass]="{'highlight': wrapper.scrollLeft !== 0 }">keyboard_arrow_left</mat-icon>
              </button>
            </div>
            <div class="button-container" [ngClass]="{'not-allowed': checkMaxRight()}">
              <button 
                mat-mini-fab aria-label="Scroll right"
                (click)="sctollTo('right')"
                [ngClass]="{'not-allowed': !(isMaxRight | async)}"
              >
                <mat-icon [ngClass]="{'highlight': (isMaxRight | async) || false}">keyboard_arrow_right</mat-icon>
              </button>
            </div>
          </div>
        </td>
      </ng-container>

      <tr 
        mat-header-row 
        *matHeaderRowDef="displayedColumns; sticky: true" 
        class="header-row"
      ></tr>
      <tr 
        [hidden]="!collapsedFilterRow" 
        mat-header-row 
        *matHeaderRowDef="displayedFilterColumns; sticky: true"
        class="filter-row"
      ></tr>
      <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>

      <tr 
        [hidden]="allFilteredEnvironmentData?.length" 
        mat-footer-row *matFooterRowDef="['placeholder']" 
        class="info"
      ></tr>
      <tr 
        [hidden]="!tableEl || !tableEl['offsetWidth'] || tableWrapper.offsetWidth - tableEl['offsetWidth'] > -16 || !allFilteredEnvironmentData?.length" 
        mat-footer-row 
        *matFooterRowDef="['scrollButtons']; sticky: true" 
        class="info"
      ></tr>
    </table>
    </div>
  </div>
</div>
