//
//  EventEmitter.swift
//  NoPassSDK
//
//  Created by Artsiom Shmaenkov on 7.06.21.
//  Copyright © 2021 PSA. All rights reserved.
//

import Foundation
import NoPassSDKReact

@objc public class EventEmitter: NSObject {
  @objc public static var shared = EventEmitter()
  
  // ReactNativeEventEmitter is instantiated by React Native with the bridge.
  private var eventEmitter: ReactNativeEventEmitter!
  
  /// All Events which must be support by React Native.
  @objc public lazy var allEvents: [String] = {
    var allEventNames: [String] = []
    for notificationType in NoPassRNBridgeEvent.allCases {
      allEventNames.append(notificationType.rawValue)
    }
    return allEventNames
  }()
  
  override private init() {
      super.init()
  }
  
  // When React Native instantiates the emitter it is registered here.
  @objc public func registerEventEmitter(eventEmitter: ReactNativeEventEmitter) {
    self.eventEmitter = eventEmitter
  }
  
  @objc public func dispatch(name: String, body: Any?) {
    eventEmitter.sendEvent(withName: name, body: body)
  }
}

enum NoPassRNBridgeEvent: String, CaseIterable {
  case onAuthRequestReceived = "OnAuthRequestReceivediOS"
  case onRadiusAuthDataChangedListener = "OnRadiusAuthDataChangedListeneriOS"
  case onAuthDataChangedListener = "OnAuthDataChangedListeneriOS"
  case onAuthResultListener = "OnAuthResultListeneriOS"
  case onAccountsWereChangedListener = "onAccountsWereChangedListeneriOS"
  case onAccountsRestoreDidFinishListener = "onAccountsRestoreDidFinishListeneriOS"
  case onAccountDidRestoreListener = "onAccountDidRestoreListeneriOS"
  case onSynchronisationDidFinishListener = "onSynchronisationDidFinishListeneriOS"
  case onSynchronisationCodeDidReceiveListener = "onSynchronisationCodeDidReceiveListeneriOS"
  case onAccountWasSynchronisedListener = "onAccountWasSynchronisedListeneriOS"
  case onSynchronisationDidFailListener = "onSynchronisationDidFailListeneriOS"
  case onRegistrationDidFailListener = "onRegistrationDidFailListeneriOS"
  case onRegistrationCodeDidReceiveListener = "onRegistrationCodeDidReceiveListeneriOS"
  case onRegistrationDidFinishListener = "onRegistrationDidFinishListeneriOS"
  
}
