//
//  CDVInAppUtils.h
//  Indigitall
//
//  Created by indigitall on 13/12/23.
//
//

#import <Foundation/Foundation.h>

#import <Indigitall/INInApp.h>
#import <Indigitall/INInAppError.h>
#import <Indigitall/INInAppDefaults.h>
#import <Indigitall/INDateUtils.h>
#import <Indigitall/INEventRequestInApp.h>
#import <Indigitall/INInAppAPIClient.h>
#import <Indigitall/INInAppAPIConstants.h>
#import <Indigitall/INInAppTopic.h>

NS_ASSUME_NONNULL_BEGIN
@interface CDVInAppUtils : NSObject
+ (void) inAppWasGot: (NSString *_Nonnull)inAppCode
            closePopupWhenClicked: (BOOL) closePopupWhenClicked
            didFound: (void(^)(INInApp *inApp))didFound
            notFound: (void(^)(void))notFound
             isPopUp: (BOOL) popUp
                view: (nullable UIView *)view
           closeIcon:(nullable UIButton *)closeIcon
   closeIconDisabled:(Boolean)closeIconDisabled
           didAppear:(nullable void(^)(void))didAppear
           didCancel:(nullable void(^)(void))didCancel
  didTouchWithAction:(nullable void(^)(INInAppAction *inAppAction))action
        didDismissed:(nullable void(^)(void))didDismissed
  onShowTimeFinished:(nullable void(^)(INInApp *inApp, int showTime))onShowTimeFinished
          didExpired:(nullable void(^)(INInApp *inApp, INError *error))didExpired
    didShowManyTimes:(nullable void(^)(INInApp *inApp, INError *error))didShowManyTimes
         didClickOut:(nullable void(^)(INInApp *inApp, INError *error))didClickOut
   didDismissForever:(nullable void(^)(INInApp *inApp, INError *error))didDismissForever
             success:(nullable void(^)(INInApp *))success
              failed:(nullable void(^)(INError *error))failed
          formFailed:(nullable void(^)(NSArray <INInAppError *>*error))formFailed
          formSubmit:(nullable void(^)(INInApp *inApp, NSDictionary * json))formSubmit;

+ (INInAppError *) wasInAppPassedFilterProperties: (INInApp *) inApp;

+ (void) inAppFilterControl: (INInApp *)inApp
                   didFound: (void(^)(INInApp *inApp))didFound
                   notFound: (void(^)(void))notFound
                    isPopUp: (BOOL) popUp
                       view: (UIView *)view
                  inAppCode: (NSString *)inAppCode
                  closeIcon:(nullable UIButton *)closeIcon
          closeIconDisabled:(Boolean)closeIconDisabled
                  didAppear:(nullable void(^)(void))didAppear
                  didCancel:(nullable void(^)(void))didCancel
         didTouchWithAction:(nullable void(^)(INInAppAction *inAppAction))action
               didDismissed:(nullable void(^)(void))didDismissed
         onShowTimeFinished:(nullable void(^)(INInApp *inApp, int showTime))onShowTimeFinished
                 didExpired:(nullable void(^)(INInApp *inApp, INError *error))didExpired
           didShowManyTimes:(nullable void(^)(INInApp *inApp, INError *error))didShowManyTimes
                didClickOut:(nullable void(^)(INInApp *inApp, INError *error))didClickOut
          didDismissForever:(nullable void(^)(INInApp *inApp, INError *error))didDismissForever
                    success:(nullable void(^)(INInApp *))success
                     failed:(nullable void(^)(INError *error))failed
                 formFailed:(nullable void(^)(NSArray <INInAppError *>*error))formFailed
                 formSubmit:(nullable void(^)(INInApp *inApp, NSDictionary * json))formSubmit;

+ (void) updateInAppGetWithInAppDb: (INInApp *)inAppDb
                           isPopUp: (BOOL) popUp
                              view: (UIView *)view
                         inAppCode: (NSString *)inAppCode
                         closeIcon:(nullable UIButton *)closeIcon
                 closeIconDisabled:(Boolean)closeIconDisabled
                         didAppear:(nullable void(^)(void))didAppear
                         didCancel:(nullable void(^)(void))didCancel
                didTouchWithAction:(nullable void(^)(INInAppAction *inAppAction))action
                      didDismissed:(nullable void(^)(void))didDismissed
                onShowTimeFinished:(nullable void(^)(INInApp *inApp, int showTime))onShowTimeFinished
                        didExpired:(nullable void(^)(INInApp *inApp, INError *error))didExpired
                  didShowManyTimes:(nullable void(^)(INInApp *inApp, INError *error))didShowManyTimes
                       didClickOut:(nullable void(^)(INInApp *inApp, INError *error))didClickOut
                 didDismissForever:(nullable void(^)(INInApp *inApp, INError *error))didDismissForever
                           success:(nullable void(^)(INInApp *))success
                            failed:(nullable void(^)(INError *error))failed
                        formFailed:(nullable void(^)(NSArray <INInAppError *>*error))formFailed
                        formSubmit:(nullable void(^)(INInApp *inApp, NSDictionary * json))formSubmit;

+ (void) addNewInApp:(INInApp *)inApp;
+ (void) inAppWasTappedWithInApp:(INInApp *)inApp;

+ (void) inAppOpenUrl:  (INInAppAction *) action;

+ (BOOL) isInAppDismissForever: (INInApp *)inApp DEPRECATED_ATTRIBUTE;
+ (void) addNewInAppToDismissForever:(INInApp *)inApp;

+ (NSString *) setExternalCode: (NSString *) code;
+ (INInAppAction *) getInAppActionFromString: (NSString *)actionString;
@end

NS_ASSUME_NONNULL_END
