//
//  NoPassRNBridgeNotificationiOS.swift
//  SdkTest
//
//  Created by Artsiom Shmaenkov on 22.06.21.
//

import Foundation
import NoPassSDKReact
import React

@objc(NoPassRNBridgeNotificationiOS)
public class NoPassRNBridgeNotificationiOS: NSObject, RCTBridgeModule {
    
    public static func moduleName() -> String! {
        return "NoPassRNBridgeNotificationiOS"
    }
    
    public static func requiresMainQueueSetup() -> Bool {
        return true
    }
    
    @objc public func handlePush(_ data: [String : Any], biometricType: String, isScreenLock: Bool) {
        if let type = BiometricType(rawValue: biometricType) {
            NoPassNotificationService.shared.passNotification(data: data,
                                                              enabled2FaMethod: type,
                                                              isScreenLock: isScreenLock)
            
            let notificationType = NoPassNotificationService.shared.getNotificationType(data: data)
            switch notificationType {
            case .UserAuthentication, .RadiusUserAuthentication:
                NoPassRNBridgeAuthentificationiOS.shared.startAuthFlow(authData: data, biometricType: type, isScreenLock: isScreenLock)
            case .UserAuthenticationUpdateImage:
                break;
            case .UserRegistration:
                break;
            case .UserDeletion:
                break;
            case .UserUpdating:
                break;
            case .AuthenticationResult:
                break;
            case .AccountSynchronization:
                break;
            case .unowned:
                break;
            @unknown default:
                break;
            }
        }
    }
    
    @objc public func getNotificationType(_ data: [String : Any], resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock?) {
        let type = NoPassNotificationService.shared.getNotificationType(data: data)
        resolver(type.notificationName())
    }
    
    @objc public func saveFCMToken(_ token: String) {
        NoPassNotificationService.shared.setRegistrationToken(token: token)
    }
    
    @objc public func getFCMToken(_ resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock?) {
        let token = NoPassNotificationService.shared.getRegistrationToken()
        resolver(token)
    }
}
