//
//  ReReactNativeSDKSwift.swift
//  LibraryRn
//
//  Created by Rajaram on 24/05/23.
//  Copyright © 2023 Facebook. All rights reserved.
//

import Foundation
import REIOSSDK

public class ReReactNativeSDKSwift : NSObject{
    
    public override init() {
        print("init")
    }
    // **** Init SDK ***
    @objc public func sdkInit(appId: String) {
        REiosHandler.debug = true
        REiosHandler.initSdk(withAppId: appId, notificationCategory: []) { status in
            print("******* SDK Init success")
        } failure: { message in
            print("********** Error to init")
        }
    }
    // ******* Notification setup
    @objc public class func willPresent(_ notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void){
        REiosHandler.setForegroundNotification(notification: notification) { opt in
            completionHandler(opt)
        }
    }
    @objc public class func didReceiveRemoteNotification(data:[String:Any]){
        REiosHandler.setCustomNotification(userInfo: data)
    }
    @objc public class func didReceiveNotificationResponse(response: UNNotificationResponse) {
        REiosHandler.setNotificationAction(response: response)
    }
    
    // ******* SDK setup
    
    @objc public class func handleDynamicLink(userActivity: NSUserActivity, successHandler: @escaping (_ returnData: String) -> (Void), failureHandler: @escaping (_ error: String) -> (Void)) {
        REiosHandler.handleDynamicLink(userActivity: userActivity) { returnData in
            successHandler(returnData)
        } failureHandler: { error in
            failureHandler(error)
        }

    }
    @objc dynamic public class func handleOpenlink(url: URL, successHandler: @escaping (_ returnData: String) -> (Void), failureHandler: @escaping (_ error: String) -> (Void)) {
        REiosHandler.handleOpenlink(url: url as URL) { returnData in
            successHandler(returnData)
        } failureHandler: { error in
            failureHandler(error)
        }
    }
    
    // SDK Methods
    @objc public class func updatePushToken(token:String){
        REiosHandler.updatePushToken(token: token)
    }
    @objc public class func customEvent(eventData:String){
        REiosHandler.addCustomEvent(eventData)
    }
    @objc public class func customEventWithData(eventName:String,eventData:[String:Any]) {
        REiosHandler.addCustomEvent(name: eventName, data: eventData)
    }
    @objc public class func onDeviceUserRegister(userRegister:String) {
        REiosHandler.registerUserData(userRegister);
    }
    @objc public class func formDataCapture(formData:String){
        REiosHandler.formDataCapture(values: formData);
    }
    @objc public class func getNotifications() -> [Any]{
       return REiosHandler.getNotificationList()
    }
    @objc public class func deleteNotificationById(campaignId:String){
        REiosHandler.deleteNotificationByCampaignId(campaignId: campaignId);
    }
    @objc public class func getReadNotificationCount(onSuccess success: @escaping (_ Count: Int) -> ()){
        REiosHandler.getReadNotificationCount { Count in
            success(Count)
        }
    }
    @objc public class func getUnReadNotificationCount(onSuccess success: @escaping (_ Count: Int) -> ()){
        REiosHandler.getUnReadNotificationCount { Count in
            success(Count)
        }
    }
    @objc public class func appConversionTracking() {
        REiosHandler.appConversionTracking()
        REiosHandler.appConversionTrackingWith()
    }
    @objc public class func appConversionTrackingWithData(data:[String:Any]) {
        REiosHandler.appConversionTrackingWith(dict: data);
    }
    @objc public class func screenNavigation(screenName:String) {
        REiosHandler.setScreenName(screenName: screenName);
        
    }
    @objc public class func readNotification(campaignId:String) {
        REiosHandler.readNotification(campaignId: campaignId) { Count in
            
        }
       
    }
    @objc public class func unReadNotification(campaignId:String) {
        REiosHandler.unReadNotification(campaignId: campaignId) { Count in
            
        }
       
    }
    @objc public class func locationUpdate(lat:String,long:String) {
        REiosHandler.updateLocation(lat: lat, long: long)
    }
    
    
   
}
