//
//  EventEmitter.swift
//  JedaiReactNativePackage
//
//  Copyright © 2022 Anagog Ltd. All rights reserved.
//

import Foundation
import React
import JedAIKit

@objc(EventEmitter)
class EventEmitter: RCTEventEmitter {
    
    static var shared: EventEmitter?
    
    static var streamIsReady: Bool = false
    var observing: Bool = false

    override init() {
        super.init()
        EventEmitter.shared = self
        AnagogSDKWrapper.shared.eventEmitterManager.delegate = self
    }
    
    @objc
    override func startObserving() {
        os_log_file("[package] EventEmitter start observing")
        observing = true
        super.startObserving()
        AnagogSDKWrapper.shared.eventEmitterManager.checkForSend()
    }

    @objc
    override func stopObserving() {
        super.stopObserving()
        observing = false
        os_log_file("[package] EventEmitter stop observing")
    }
    
    @objc
    override func supportedEvents() -> [String]! {
        return EventEmitterAction.allCases.map { $0.rawValue }
    }
    
    @objc
    override static func requiresMainQueueSetup() -> Bool {
        return true
    }
    
}

extension EventEmitter: AnagogEventEmitterManagerDelegate {
    var hasListeners: Bool { Self.streamIsReady && observing }
    
    func sendEvent(action: EventEmitterAction, payload: Any?) {
        os_log_file("[package] EventEmitter send event %@", action.rawValue)
        super.sendEvent(withName: action.rawValue, body: payload)
    }
}
