//
//  FetchInteractor.swift
//  AirbridgeReactNative
//
//  Created by WOF on 7/24/24.
//

import React
import Airbridge

@objc(FetchInteractor)
class FetchInteractor: RCTEventEmitter {
    @objc(fetchDeviceUUID:onSuccess:onFailure:)
    func fetchDeviceUUID(
        _ promiseID: String,
        _ onSuccess: @escaping RCTResponseSenderBlock,
        _ onFailure: @escaping RCTResponseSenderBlock
    ) {
        let handled = Airbridge.fetchDeviceUUID { deviceUUID in
            onSuccess([deviceUUID])
        } onFailure: { error in
            onFailure([error.localizedDescription])
        }
        sendEvent(
            withName: "airbridge.fetch",
            body: [
                "id": promiseID,
                "type": "onResolve",
                "value": handled,
            ]
        )
    }
    
    @objc(fetchAirbridgeGeneratedUUID:onSuccess:onFailure:)
    func fetchAirbridgeGeneratedUUID(
        _ promiseID: String,
        _ onSuccess: @escaping RCTResponseSenderBlock,
        _ onFailure: @escaping RCTResponseSenderBlock
    ) {
        let handled = Airbridge.fetchAirbridgeGeneratedUUID { airbridgeGeneratedUUID in
            onSuccess([airbridgeGeneratedUUID])
        } onFailure: { error in
            onFailure([error.localizedDescription])
        }
        sendEvent(
            withName: "airbridge.fetch",
            body: [
                "id": promiseID,
                "type": "onResolve",
                "value": handled,
            ]
        )
    }
    
    override func supportedEvents() -> [String]! {
        ["airbridge.fetch"]
    }
    
    override class func requiresMainQueueSetup() -> Bool {
        true
    }
    
    override var methodQueue: dispatch_queue_t! {
        DispatchQueue.main
    }
}
