/*
 * Copyright © Dynamsoft Corporation. All rights reserved.
 */

import Foundation
import React
import DynamsoftCaptureVisionBundle

@objc(RNDynamsoftLicense)
class RNDynamsoftLicense: NSObject {

    private var licenseResolve: RCTPromiseResolveBlock?
    private var licenseReject: RCTPromiseRejectBlock?

    @objc static func requiresMainQueueSetup() -> Bool {
        return false
    }

    @objc(initLicense:resolve:reject:)
    func initLicense(_ license: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
        licenseResolve = resolve
        licenseReject = reject
        ClientRemark.setEdition("react-native")
        LicenseManager.initLicense(license, verificationDelegate: self)
    }

    @objc func setDeviceFriendlyName(_ name: String) {
        LicenseManager.setDeviceFriendlyName(name)
    }

    @objc(getDeviceUUID:reject:)
    func getDeviceUUID(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
        resolve(LicenseManager.getDeviceUUID())
    }
}

extension RNDynamsoftLicense: LicenseVerificationListener {
    func onLicenseVerified(_ isSuccess: Bool, error: Error?) {
        if isSuccess {
            licenseResolve?(true)
        } else {
            let nsError = error as NSError?
            let code = nsError.map { String($0.code) } ?? ""
            licenseReject?(code, nsError?.localizedDescription, error)
        }
    }
}
