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

// Services
import { ApiService } from '../api/api.service';

@Injectable({
  providedIn: 'root'
})
export class ManageSupplierService {

  constructor(private http: HttpClient, public api: ApiService) { }

  optOutStatus = new EventEmitter<any>();
  getStatus = new EventEmitter<any>();

  /**
        * Gets Manage Supplier Data
        * @returns {object} promise
        */
  getUserSupplierData() {
    return this.api.read('/User-ManageSupplier');
  };

  /**
   * Send request to confirm account with supplier
   * @param {object} args
   * @returns {object} promise
   */
  verifyDirectAccount(args: {}) {
    return this.api.create('/User-ConfirmAccount', args);
  };

  /**
   * Sends request to get PDF file content
   * @param {string} doc
   * @param {int} userId
   * @param {int} supplierId
   * @returns {object} promise
   */
  viewUniversalApp(doc: string, userId: number, supplierId: number) {
    var data = {
      document: doc,
      supplierId: supplierId,
      user_id: userId
    };
    return this.api.create('/User-ManageSupplier', data);
  }

  /**
   * Request to update buyer payment check status for the supplier
   * @param {object} args
   * @returns {object} promise
   */
  onFileStatus(args: object) {
    return this.api.create('/User-PaymentType', args);
  };

  /**
   * Call back error method for manage supplier service
   */
  errorCallBack(response: any) {
    this.api.errorCallback(response);
  };
  /**
   * Request to opt out of marketing
   * @param {object} args
   * @returns {object} promise
   */
  optOut(args: {}) {
    return this.api.create('/User-MarketingOptOut', args);
  };
  /**
   * Returns true if optout_all is true for the user
   * @returns {object} promise
   */
  getOptOutAllFlag() {
    return this.api.read('/User-MarketingOptOut');
  };
  /**
   * Returns supplier data for information modal
   * @param {object} args
   * @returns {object} promise
   */
  getSupplierData(args: {}) {
    return this.api.create('/User-SupplierInfo', args);
  };
  /**
   * Returns supplier data for information modal
   * @param {object} args
   * @returns {object} promise
   */
  hideSupplier(args: {}) {
    return this.api.create('/User-ManageSupplier/hideSupplier', args);
  };
  /**
   * Returns wheather a supplierFilter is set or not
   * @param {object} args
   * @returns {object} promise
   */
  supplierFilter(args: {}) {
    return this.api.create('/User-ManageSupplier/supplierFilter', args);
  };

  updatePreference(data: any) {
    return this.api.create('/User-ManageSupplier/updatePreference', data);
  };

  getPreferences() {
    return this.api.read('/User-ManageSupplier/getPreferences');
  };

}
