<!--********************************************************************************
 * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 ********************************************************************************-->


<style>
  .container-fluid {
    padding: 0;
  }
</style>
<div class="container-fluid">
  <div class="box" style="margin-bottom: 15px;">
    <div class="well">
      <h2>{{ 'filerelease.mdm-filerelease.incoming-release-requests' | translate }}</h2>
    </div>
    <table class="table table-hover">
      <thead>
        <tr>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-test-name' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-request-submitted-by' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-release-validity' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-release-expires-on' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-status' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-format' | translate }}</th>
          <th></th>
        </tr>
      </thead>
      <tbody>
        <tr *ngFor="let data of incoming" [ngClass]="getState(data)" (click)=setData(data) (click)='setEvent("approve")' (click)=lgModal.show()>
          <td>{{ data.name }}</td>
          <td>{{ data.sender }}</td>
          <td>{{ data.validity }} {{ 'filerelease.mdm-filerelease.days' | translate }}</td>
          <td>{{ getDate(data.expire) }}</td>
          <td>{{ getTransState(data.state) | translate }}</td>
          <td>{{ getFormat(data.format) | translate }}</td>
          <td></td>
        </tr>
      </tbody>
    </table>
  </div>
</div>
<div class="container-fluid">
  <div class="box">
    <div class="well">
      <h2>{{ 'filerelease.mdm-filerelease.outgoing-release-requests' | translate }}</h2>
    </div>
    <table class="table table-hover">
      <thead>
        <tr>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-test-name' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-test-responsible-person' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-release-validity' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-release-expires-on' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-status' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-format' | translate }}</th>
          <th>{{ 'filerelease.mdm-filerelease.tblhdr-download' | translate }}</th>
        </tr>
      </thead>
      <tbody>
        <tr *ngFor="let data of outgoing" [ngClass]="getState(data)" (click)=setData(data) (click)='setEvent("edit")'>
          <td (click)=lgModal.show()>{{ data.name }}</td>
          <td (click)=lgModal.show()>{{ data.receiver }}</td>
          <td (click)=lgModal.show()>{{ data.validity }}  {{ 'filerelease.mdm-filerelease.days' | translate }}</td>
          <td (click)=lgModal.show()>{{ getDate(data.expire) }}</td>
          <td (click)=lgModal.show()>{{ getTransState(data.state) | translate }}</td>
          <td (click)=lgModal.show()>{{getFormat(data.format) | translate }}</td>
          <td>
            <a *ngIf="data.state == 'RELEASE_RELEASED'" href="{{dataHost}}{{data.fileLink}}" download><span class="fa fa-arrow-circle-o-down"></span></a>
            <span *ngIf="data.state != 'RELEASE_RELEASED'" class="fa fa-ban"></span>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

<div bsModal #lgModal="bs-modal" class="modal fade" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" (click)="lgModal.hide()">
          <span aria-hidden="true">&times;</span>
        </button>
        <h4 class="modal-title"> {{ 'filerelease.mdm-filerelease.release' | translate }}</h4>
      </div>
      <div class="modal-body">
        <mdm-filerelease-display [release]=release ></mdm-filerelease-display>
        <div class="btn-group" *ngIf='event=="approve"'>
          <button type="button" class="btn btn-success" (click)="approveRelease()" (click)="lgModal.hide()" [disabled]="isReleaseable()"> {{ 'filerelease.mdm-filerelease.btn-approve' | translate }}</button>
          <button type="button" class="btn btn-danger" (click)="smModal.show()" (click)="lgModal.hide()" [disabled]="isReleaseable()"> {{ 'filerelease.mdm-filerelease.btn-decline' | translate }}</button>
        </div>
        <div class="btn-group" *ngIf='event=="edit"'>
          <button type="button" class="btn btn-default" (click)="deleteRelease()" (click)="lgModal.hide()" [disabled]=isDeletable()> {{ 'filerelease.mdm-filerelease.btn-cancel-request' | translate }}</button>
        </div>
      </div>
    </div>
  </div>
</div>

<div bsModal #smModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-sm">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" aria-label="Close" (click)="smModal.hide()">
          <span aria-hidden="true">&times;</span>
        </button>
        <h4 class="modal-title"> {{ 'filerelease.mdm-filerelease.reason' | translate }}</h4>
      </div>
      <div class="modal-body">
        <textarea #reason cols="35" rows="4" class="form-control"></textarea>
        <div class="btn-group">
          <button type="button" class="btn btn-danger" (click)="rejectRelease(reason.value)" (click)=smModal.hide() (click)="reason.value = ''"> {{ 'filerelease.mdm-filerelease.btn-decline' | translate }}</button>
          <button type="button" class="btn btn-default" (click)="smModal.hide()" (click)="reason.value = ''"> {{ 'filerelease.mdm-filerelease.btn-cancel' | translate }}</button>
        </div>
      </div>
    </div>
  </div>
</div>
