import { EBiometricsEnvironment, EBiometricsProvider, EBiometricsState } from '../models';
import { EBM_TRANSACTIONS_API_ENDPOINT_DEVELOPMENT, EBM_TRANSACTIONS_API_ENDPOINT_PRODUCTION } from '../constants';

export class TransactionsService {
  private _url: string;

  constructor() {
    this._url = EBM_TRANSACTIONS_API_ENDPOINT_DEVELOPMENT;
  }

  private _configure(state: EBiometricsState): void {
    if (state.environment === EBiometricsEnvironment.production) {
      this._url = EBM_TRANSACTIONS_API_ENDPOINT_PRODUCTION
    }
  }

  async create(state: EBiometricsState): Promise<any> {
    this._configure(state);    

    return new Promise((resolve, reject) => {
      const request: any = {
        provider: state.provider,
        extraInfo: state.extraInfo,
        ...state.params
      };

      if (state.provider === EBiometricsProvider.softcol) request.queue = state.queue

      const xhr = new XMLHttpRequest();
      xhr.open('POST', this._url, true);
      xhr.setRequestHeader('X-Ebm-Token', state.account);
      xhr.setRequestHeader('Content-Type', 'application/json');
      xhr.send(JSON.stringify(request));

      xhr.onreadystatechange = function () {
        if (this.readyState === XMLHttpRequest.DONE) {
          if (this.status === 0 || (this.status >= 200 && this.status < 400)) {
            resolve(JSON.parse(this.responseText));
          } else reject();
        }
      };
    });
  }
}
