//
//  SmaatoCMP.h
//  SmaatoSDKCMP
//
//  Created by Stefan Meyer on 09.07.21.
//  Copyright © 2021 Smaato Inc. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "SMACMPConfiguration.h"
#import "UserConsentData.h"

NS_ASSUME_NONNULL_BEGIN

typedef enum : NSUInteger {
    SmaatoCMPConsentStatusUndefined = 0,
    SmaatoCMPConsentStatusReady,
    SmaatoCMPConsentStatusExpired,
} SmaatoCMPConsentStatus;

@protocol SMACMPFileLoader <NSObject>
- (void)loadFileForUrl:(NSURL *)url response:(void (^)(NSData * __nullable fileData, NSError * __nullable error))response;
@end

@interface SmaatoCMP : NSObject <SMACMPFileLoader>

+ (UserConsentData*)getUserConsentData NS_SWIFT_NAME(userConsentData());

/// Access a configured instance of SmaatoCMP after calling initCMPWithConfig:
+ (instancetype)sharedInstance NS_SWIFT_NAME(shared());

- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initCMPWithConfig:(id<SMACMPConfiguration>)config NS_DESIGNATED_INITIALIZER NS_SWIFT_NAME(init(withConfig:));

/**
 Enable GDPR if you are not using the Core module and your app is used in a GDPR region.
 BOOL enableGDPR: default = NO
 */
- (void)setEnableGDPR:(BOOL)enableGDPR;

- (void)requestWelcomeScreenOn:(UIViewController *)viewController completion:(void (^ __nullable)(void))completion;
- (void)requestWelcomeScreenOn:(UIViewController *)viewController;

- (void)showPrivacyCenter;
- (void)showPrivacyCenterWithCompletion:(void (^ _Nullable)(void))completion;
- (SmaatoCMPConsentStatus)consentStatus;

- (void)resetAllCachedData;
- (void)resetAllCMPData;

/// This Api will be used to check if User is in GDPR region or isConsentRequiredWorldwide and consent given is not older than 13 months. If consent is older than 13 months then Welcome Screen will be displayed and users will be asked again for consents.
- (void)checkGDPR: (UIViewController * _Nonnull)viewController onCompletion: (void (^)(BOOL needNewUserConsent))completion;

@end

NS_ASSUME_NONNULL_END
