//
//  CfLogLoyalty.swift
//  ReactNativeCfLoyalty
//
//  Created by MOIZ HASSAN KHAN on 2/5/24.
//  Copyright © 2024 Facebook. All rights reserved.
//

import Foundation
import CausalFoundrySDKLoyalty

@objc(CfLogLoyalty)
class CfLogLoyalty: NSObject {

   @objc
    func logLevelEvent(_ prevLevel: String, newLevel: String, moduleId: String, updateImmediately: Bool) {
        CfLogLevelEvent()
            .setNewLevel(newLevel: Int(newLevel))
            .setPreviousLevel(prevLevel: Int(prevLevel))
            .setModuleId(moduleId: moduleId)
            .updateImmediately(updateImmediately: updateImmediately)
            .build()
   }
    
    @objc
    func logMilestoneEvent(_ milestoneId: String, action: String, updateImmediately: Bool) {
        CfLogMilestoneEvent()
            .setMilestoneId(milestoneId: milestoneId)
            .setAction(action: action)
            .updateImmediately(updateImmediately: updateImmediately)
            .build()
   }
    
    @objc
    func logPromoEvent(_ promoId: String, action: String, promoTitle: String, promoType: String, itemList: String, updateImmediately: Bool) {
        CfLogPromoEvent()
            .setPromoId(promoId: promoId)
            .setPromoAction(promoAction: action)
            .setPromoTitle(promoTitle: promoTitle)
            .setPromoType(promoType: promoType)
            .addItemList(itemListString: itemList)
            .updateImmediately(updateImmediately: updateImmediately)
            .build()
   }
    
    @objc
    func logSurveyEvent(_ action: String, survey: String, responseList: String, updateImmediately: Bool) {
        CfLogSurveyEvent()
            .setAction(action: action)
            .setSurveyObject(surveyObject: survey)
            .setResponseList(responseList: responseList)
            .updateImmediately(updateImmediately: updateImmediately)
            .build()
   }
    
    
    @objc
    func logRewardEvent(_ rewardId: String, action: String, totalPoints: NSNumber, accPoints: NSNumber, redeemObject: String?, updateImmediately: Bool) {
        
        let accPointsValue = accPoints ?? 0
        let totalPointsValue = totalPoints ?? 0
        let cfLogRewardEvent = CfLogRewardEvent()
            .setRewardId(rewardId: rewardId)
            .setAction(action: action)
            .setAccumulatedPoints(accPoints: Float(truncating: accPointsValue))
            .setTotalPoints(totalPoints: Float(truncating: totalPointsValue))
        if(redeemObject != nil && redeemObject != ""){
            cfLogRewardEvent.setRedeemObject(redeemObject: redeemObject!)
        }
        cfLogRewardEvent.updateImmediately(updateImmediately: updateImmediately)
        cfLogRewardEvent.build()
   }
    
    
    @objc
    func updateSurveyCatalog(_ surveyId: String, surveyCatalogModel: String) {
        CfLoyaltyCatalog.updateSurveyCatalog(surveyId: surveyId, surveyCatalogModel: surveyCatalogModel)
   }
    
    @objc
    func updateRewardCatalog(_ rewardId: String, rewardCatalogModel: String) {
        CfLoyaltyCatalog.updateRewardCatalog(rewardId: rewardId, rewardCatalogModel: rewardCatalogModel)
   }

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

//  @objc(multiply:withB:withResolver:withRejecter:)
//  func multiply(a: Float, b: Float, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
//    resolve(a*b)
//  }
}
