// Angular Core
import { Injectable, EventEmitter } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Location } from '@angular/common';

// RxJs
import {Observable} from "rxjs";

// Environment
import { environment } from '../../../environments/environment';
// import * as EventEmitter from 'events';
@Injectable({
  providedIn: 'root'
})
export class ApiService {

  checkIfUserAccSuspended = new EventEmitter();

  baseUrl = '/ws';
  inactive = false;

  constructor(
    private http: HttpClient, 
    private location:Location) { }

  errorCallback(response: any) {
    var value = {
      string: 'Error:',
      data: response
    };
    var status = response.status;
    if (status === 403) {
      if (response.error && response.error.validation.irregularSearch) {
        this.checkIfUserAccSuspended.emit("checkIfUserAccSuspended")
      }
      //get current url
      var myUrl = this.location.path();
      if (!this.inactive) {
        var parentUrl = location.origin;
        var href = parentUrl + '/' + encodeURI('market/login?redirect=' + decodeURI(myUrl));
        //redirect to login with redirect param
        if (location.href.search('privacy') === -1 && location.href.search('terms') === -1) {
          location.href = href;
        }
      }
    }
    return response;
  };

  getXSRFTOKEN() {
    var name = "XSRF-TOKEN=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for (var i = 0; i < ca.length; i++) {
      var c = ca[i];
      while (c.charAt(0) == ' ') {
        c = c.substring(1);
      }
      if (c.indexOf(name) == 0) {
        return c.substring(name.length, c.length);
      }
    }
    return "";
  };

  create(url: string, data: any) : Observable<any> {
    return this.http.post(this.baseUrl + url, data, {headers: {"X-Xsrf-Token": this.getXSRFTOKEN()}});
  };

  read(url: string) : Observable<any> {
    return this.http.get(this.baseUrl + url, {headers: {"X-Xsrf-Token": this.getXSRFTOKEN()}});
  };

  update(url: string, data: any) : Observable<any> {
    return this.http.put(this.baseUrl + url, data, {headers: {"X-Xsrf-Token": this.getXSRFTOKEN()}});
  };

  delete(url: string) : Observable<any> {
    return this.http.delete(this.baseUrl + url, {headers: {"X-Xsrf-Token": this.getXSRFTOKEN()}});
  };

  upload(url: string, data: any) : Observable<any> {
    return this.http.post(this.baseUrl + url, data, {headers: {"X-Xsrf-Token": this.getXSRFTOKEN()}});
  };
}
