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

<section class="audit-table-wrapper" id="scrolling" [ngClass]="{'scroll': auditData?.length > 6}">
  <table mat-table [dataSource]="auditData" class="data-grid audit mat-elevation-z6">

    <ng-container matColumnDef="date">
      <th mat-header-cell *matHeaderCellDef class="th_date label-header">
        <div class="label"><span class="text">Date</span></div>
        <button 
          mat-icon-button 
          aria-label="More" 
          class="ar" 
          (click)="toggleFilterRow()"
        >
          <i class="material-icons">
            <span>more_vert</span>
          </i>
        </button>
      </th>
      <td mat-cell *matCellDef="let element"> {{element.timestamp | localDate : 'short'}} </td>
      <td mat-footer-cell *matFooterCellDef class="table-footer">
      </td>
    </ng-container>

    <ng-container matColumnDef="user">
      <th mat-header-cell *matHeaderCellDef class="th_user label-header" [ngStyle]="{'z-index': 99}">
        <div class="label"><span class="audit-user"> User</span></div>
        <button 
          mat-icon-button 
          aria-label="More" 
          class="ar" 
          (click)="toggleFilterRow()"
        >
          <i class="material-icons">
            <span *ngIf="filterAuditData.users.length > 0; else user_filtered">filter_list</span>
            <ng-template #user_filtered>more_vert</ng-template>
          </i>
        </button>
      </th>
      <td mat-cell *matCellDef="let element" class="th_user">
        <div class="table-item-wrapper">
          <span class="table-item user-col">{{element.user || 'N/A'}}</span>
        </div>
      </td>
      <td mat-footer-cell *matFooterCellDef class="table-footer"></td>
    </ng-container>

    <ng-container matColumnDef="action">
      <th mat-header-cell *matHeaderCellDef class="th_action label-header" [ngStyle]="{'zIndex': 98, 'display': 'sticky'}">
        <div class="label">
          <span class="text"> Action </span>
        </div>
        <button 
          mat-icon-button 
          aria-label="More" 
          class="ar" 
          (click)="toggleFilterRow()"
        >
          <i class="material-icons">
            <span>more_vert</span>
          </i>
        </button>
      </th>
      <td mat-cell *matCellDef=" let element" class="th_action">
        <div class="action-wrapper">
          <span
            class="ellipsis"
            [matTooltip]="element.action | convertaction"
            [matTooltipClass]="'full-size-tooltip'"
            matTooltipPosition="above"
            [matTooltipDisabled]="element.action?.length < 12"
          >
            {{element.action | convertaction }}
          </span>
          <div class="audit-info" (click)="openActionInfo(element)" *ngIf="element.info">
            <i class="material-icons">info</i>
          </div>
        </div>
      </td>
      <td mat-footer-cell *matFooterCellDef  class="table-footer"></td>
    </ng-container>

    <ng-container matColumnDef="project">
      <th mat-header-cell *matHeaderCellDef class="th_project label-header">
        <div class="label"><span class="text">Project</span></div>
        <button 
          mat-icon-button 
          aria-label="More" 
          class="ar" 
          (click)="toggleFilterRow()"
        >
          <i class="material-icons">
            <span *ngIf="filterAuditData.projects.length > 0; else user_filtered">filter_list</span>
            <ng-template #user_filtered>more_vert</ng-template>
          </i>
        </button>
      </th>
      <td mat-cell *matCellDef="let element" class="th_project">
        <div class="table-item-wrapper">
          <span class="table-item project">{{element.project || 'N/A'}}</span>
        </div>
      </td>
      <td mat-footer-cell *matFooterCellDef class="table-footer"></td>
    </ng-container>

    <ng-container matColumnDef="resource-type">
      <th mat-header-cell *matHeaderCellDef class="th_resource-type label-header">
        <div class="label"><span class="text">Resource type</span></div>
        <button 
          mat-icon-button 
          aria-label="More" 
          class="ar" 
          (click)="toggleFilterRow()"
        >
          <i class="material-icons">
            <span *ngIf="filterAuditData.resource_types.length > 0; else user_filtered">filter_list</span>
            <ng-template #user_filtered>more_vert</ng-template>
          </i>
        </button>
      </th>
      <td mat-cell *matCellDef="let element" class="th_resource-type">
        <div class="table-item-wrapper">
          <span class="table-item">
            {{element.type ? (element.type | convertaction) : 'N/A'}}
          </span>
        </div>
      </td>
      <td mat-footer-cell *matFooterCellDef class="table-footer" [colSpan]="3" >
        <div class="pagination-wrapper">
          <div class="selected-items-wrapper">
            <span>Items per page:</span>
            <div class="select-wrapper">
              <div class="mat-reset">
                <div class="control selector-wrapper">
                  <mat-form-field>
                    <mat-label></mat-label>
                    <mat-select [(value)]="showItemsPrPage">
                      <mat-option 
                        *ngFor="let item of itemsPrPage" 
                        [value]="item" 
                        (click)="setItemsPrPage(item)"
                      >
                        {{ item }}
                      </mat-option>
                    </mat-select>
                    <button class="caret">
                      <i class="material-icons">keyboard_arrow_down</i>
                    </button>
                  </mat-form-field>
                </div>
              </div>
            </div>
          </div>
          <span>
            <span>{{firstItem}}</span> - <span>{{(lastItem < allItems) ? lastItem: allItems}}</span> of <span>{{allItems}}</span>
          </span>
          <span>
            <span [ngClass]="{'not-active':  !isNavigationDisabled || firstItem === 1}">
              <span 
                class="navigation-butts" 
                (click)="loadItemsForPage('first')" 
                [ngClass]="{'not-allowed': firstItem === 1 || !isNavigationDisabled}"
              >
                <i class="material-icons">first_page</i>
              </span>
            </span>
            <span [ngClass]="{'not-active': firstItem === 1 || !isNavigationDisabled}">
              <span 
                class="navigation-butts" 
                (click)="loadItemsForPage('previous')" 
                [ngClass]="{'not-allowed': firstItem === 1 || !isNavigationDisabled}"
              >
                <i class="material-icons">keyboard_arrow_left</i>
              </span>
            </span>
            <span [ngClass]="{'not-active': lastItem >= allItems || !isNavigationDisabled}">
              <span 
                class="navigation-butts" 
                (click)="loadItemsForPage('next')" 
                [ngClass]="{'not-allowed': lastItem >= allItems || !isNavigationDisabled}"
              >
                <i class="material-icons">keyboard_arrow_right</i>
              </span>
            </span>
            <span [ngClass]="{'not-active': lastItem >= allItems || !isNavigationDisabled}">
              <span 
                class="navigation-butts" 
                (click)="loadItemsForPage('last')" 
                [ngClass]="{'not-allowed': lastItem >= allItems || !isNavigationDisabled}"
              >
                <i class="material-icons">last_page</i>
              </span>
            </span>
          </span>
        </div>
      </td>
    </ng-container>

    <ng-container matColumnDef="resource">
      <th mat-header-cell *matHeaderCellDef class="th_resource label-header">
        <div class="label"><span class="text">Resource</span></div>
        <button 
          mat-icon-button 
          aria-label="More" 
          class="ar" 
          (click)="toggleFilterRow()"
        >
          <i class="material-icons">
            <span *ngIf="filterAuditData.resources.length > 0; else user_filtered">filter_list</span>
            <ng-template #user_filtered>more_vert</ng-template>
          </i>
        </button>
      </th>
      <td mat-cell *matCellDef="let element" class="th_resource">
        <div class="table-item-wrapper">
          <span 
            class="ellipsis"
            [matTooltip]="element.resourceName || 'N/A'"
            matTooltipPosition="above">
            {{element.resourceName || 'N/A'}}
          </span>
        </div>
      </td>
      <td mat-footer-cell *matFooterCellDef class="table-footer" [hidden]="true"></td>
    </ng-container>

    <ng-container matColumnDef="buttons">
      <th mat-header-cell *matHeaderCellDef class="th_buttons label-header"></th>
      <td mat-cell *matCellDef="let element"></td>
      <td mat-footer-cell *matFooterCellDef class="table-footer" [hidden]="true">
      </td>
    </ng-container>

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

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

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

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

    <ng-container matColumnDef="actions-filter">
      <th mat-header-cell *matHeaderCellDef class="filter-row-item"></th>
    </ng-container>

    <ng-container matColumnDef="date-filter">
      <th mat-header-cell *matHeaderCellDef class="filter-row-item"></th>
    </ng-container>

    <ng-container matColumnDef="filter-buttons" stickyEnd>
      <th mat-header-cell *matHeaderCellDef class="filter-row-item">
        <div class="actions audit-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)="buildAuditGrid(true)" 
            [disabled]="isNavigationDisabled"
          >
            <i class="material-icons">done</i>
          </button>
        </div>
      </th>
    </ng-container>

    <ng-container matColumnDef="placeholder">
      <td mat-footer-cell *matFooterCellDef colspan="7" class="info">
        <span *ngIf="!filterConfiguration.users?.length;else noMatch">No data available</span>
        <ng-template #noMatch>
          <span>No matches found</span>
        </ng-template>
      </td>
    </ng-container>

    <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true" class="header-row"></tr>

    <tr 
      [hidden]="!collapseFilterRow" 
      mat-header-row 
      *matHeaderRowDef="displayedFilterColumns; sticky: true"
      class="filter-row"
    ></tr>
    <tr mat-row *matRowDef="let row; columns: displayedColumns;" class="content-row"></tr>
    <tr [hidden]="!auditData?.length" mat-footer-row *matFooterRowDef="displayedColumns"></tr>
    <tr [hidden]="auditData?.length" mat-footer-row *matFooterRowDef="['placeholder']"></tr>
  </table>
</section>
