#ifndef OTCloudStore_h
#define OTCloudStore_h
#if OCTAGON
#import "keychain/ot/OTLocalStore.h"
#import <CloudKit/CloudKit.h>
#import <CloudKit/CKContainer_Private.h>
#import "keychain/ckks/CKKSZone.h"
#import "keychain/ckks/CloudKitDependencies.h"
#import "keychain/ckks/CKKSCondition.h"
#import "keychain/ckks/CKKSZoneChangeFetcher.h"
#import "keychain/ckks/CKKSNotifier.h"
#import "keychain/ckks/CKKSSQLDatabaseObject.h"
#import "keychain/ckks/CKKSRecordHolder.h"
#import "OTBottledPeerRecord.h"
NS_ASSUME_NONNULL_BEGIN
@interface OTCloudStore : CKKSZone <CKKSZoneUpdateReceiver, CKKSAccountStateListener>
@property (nonatomic, readonly) NSString* contextID;
@property (nonatomic, readonly) NSString* dsid;
@property (nonatomic, readonly) NSString* containerName;
@property (nonatomic, readonly) CKRecordID* recordID;
@property (nonatomic, readonly) CKKSResultOperation* viewSetupOperation;
@property CKKSCondition* loggedIn;
@property CKKSCondition* loggedOut;
- (instancetype) initWithContainer:(CKContainer*) container
zoneName:(NSString*)zoneName
accountTracker:(nullable CKKSCKAccountStateTracker*)tracker
reachabilityTracker:(nullable CKKSReachabilityTracker*)reachabilityTracker
localStore:(OTLocalStore*)localStore
contextID:(NSString*)contextID
dsid:(NSString*)dsid
fetchRecordZoneChangesOperationClass:(Class<CKKSFetchRecordZoneChangesOperation>) fetchRecordZoneChangesOperationClass
fetchRecordsOperationClass:(Class<CKKSFetchRecordsOperation>)fetchRecordsOperationClass
queryOperationClass:(Class<CKKSQueryOperation>)queryOperationClass
modifySubscriptionsOperationClass:(Class<CKKSModifySubscriptionsOperation>) modifySubscriptionsOperationClass
modifyRecordZonesOperationClass:(Class<CKKSModifyRecordZonesOperation>) modifyRecordZonesOperationClass
apsConnectionClass:(Class<CKKSAPSConnection>) apsConnectionClass
operationQueue:(nullable NSOperationQueue *)operationQueue;
- (BOOL) uploadBottledPeerRecord:(OTBottledPeerRecord *)bprecord
escrowRecordID:(NSString *)escrowRecordID
error:(NSError**)error;
- (BOOL) downloadBottledPeerRecord:(NSError**)error;
- (BOOL) removeBottledPeerRecordID:(CKRecordID*)recordID error:(NSError**)error;
- (nullable NSArray*) retrieveListOfEligibleEscrowRecordIDs:(NSError**)error;
- (void)notifyZoneChange:(CKRecordZoneNotification* _Nullable)notification;
- (void)handleCKLogin;
- (BOOL) performReset:(NSError**)error;
@end
NS_ASSUME_NONNULL_END
#endif
#endif