import {HttpClient, HttpHeaders} from '@angular/common/http';
import {Injectable} from '@angular/core';
import {Event} from 'projects/vitamui-library/src/public-api';
import {tap} from 'rxjs/operators';
import {SearchService} from 'ui-frontend-common';

import {OperationApiService} from '../core/api/operation-api.service';
import {VitamUISnackBar, VitamUISnackBarComponent} from '../shared/vitamui-snack-bar';

@Injectable({
  providedIn: 'root'
})
export class ProbativeValueService extends SearchService<Event> {

  constructor(
    private operationApiService: OperationApiService,
    private snackBar: VitamUISnackBar,
    http: HttpClient) {
    super(http, operationApiService, 'ALL');
  }

  create(probativeValueRequest: any, headers: HttpHeaders) {
    for (const header in this.headers) {
      if (this.headers.hasOwnProperty(header)) {
        headers.set(header, this.headers.get(header));
      }
    }

    return this.operationApiService.runProbativeValue(probativeValueRequest, headers)
      .pipe(
        tap(
          () => {
            this.snackBar.openFromComponent(VitamUISnackBarComponent, {
              panelClass: 'vitamui-snack-bar',
              data: {type: 'probativeValueRun'},
              duration: 10000
            });
          },
          (error: any) => {
            console.log('error: ', error);
            if (!error || !error.error) {
              return;
            }
            this.snackBar.open(error.error.message, null, {
              panelClass: 'vitamui-snack-bar',
              duration: 10000
            });
          }
        )
      );
  }

  export(id: string, accessContractId: string) {
    this.operationApiService.downloadProbativeValue(id, new HttpHeaders({'X-Access-Contract-Id': accessContractId})).subscribe((blob) => {
      const element = document.createElement('a');
      element.href = window.URL.createObjectURL(blob);
      element.download = id + '.zip';
      element.style.visibility = 'hidden';
      document.body.appendChild(element);
      element.click();
      document.body.removeChild(element);
    });
  }
}