package com.castlabs.reactnative.utils;

import com.castlabs.reactnative.errors.PrestoPlayError;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;

public class BaseEventEmitter {

  private final EventEmitter emitter;

  public BaseEventEmitter(EventEmitter emitter) {
      this.emitter = emitter;
  }

  /**
   * Emits the error event.
   *
   * @param consumerId the player Id
   * @param error the thrown exception
   */
  public void emitError(String consumerId, PrestoPlayError error) {
    WritableMap jsonError = error.toJson();
    emit(consumerId, "error", jsonError);
  }

  protected void emit(String consumerId, String eventType, WritableMap eventDetails) {
    WritableMap event = Arguments.createMap();

    event.putString("consumerId", consumerId);
    event.putString("type", eventType);
    event.putDouble("timestamp", System.currentTimeMillis());
    event.putMap("details", eventDetails);

    this.emitter.emit(event);
  }
}
