#ifndef CKKSZone_h
#define CKKSZone_h
#import <Foundation/Foundation.h>
#if OCTAGON
#import "keychain/ckks/CloudKitDependencies.h"
#import "keychain/ckks/CKKSCKAccountStateTracker.h"
#endif
#if OCTAGON
@interface CKKSZone : NSObject<CKKSZoneUpdateReceiver, CKKSAccountStateListener> {
CKContainer* _container;
CKDatabase* _database;
CKRecordZone* _zone;
}
#else
@interface CKKSZone : NSObject {
}
#endif
@property (readonly) NSString* zoneName;
@property bool setupStarted;
@property bool setupComplete;
@property CKKSGroupOperation* zoneSetupOperation;
@property bool zoneCreated;
@property bool zoneSubscribed;
@property NSError* zoneCreatedError;
@property NSError* zoneSubscribedError;
#if OCTAGON
@property CKKSAccountStatus accountStatus;
@property (readonly) CKContainer* container;
@property (readonly) CKDatabase* database;
@property (weak) CKKSCKAccountStateTracker* accountTracker;
@property (readonly) CKRecordZone* zone;
@property (readonly) CKRecordZoneID* zoneID;
@property (readonly) Class<CKKSFetchRecordZoneChangesOperation> fetchRecordZoneChangesOperationClass;
@property (readonly) Class<CKKSFetchRecordsOperation> fetchRecordsOperationClass;
@property (readonly) Class<CKKSQueryOperation> queryOperationClass;
@property (readonly) Class<CKKSModifySubscriptionsOperation> modifySubscriptionsOperationClass;
@property (readonly) Class<CKKSModifyRecordZonesOperation> modifyRecordZonesOperationClass;
@property (readonly) Class<CKKSAPSConnection> apsConnectionClass;
@property dispatch_queue_t queue;
- (instancetype)initWithContainer: (CKContainer*) container
zoneName: (NSString*) zoneName
accountTracker:(CKKSCKAccountStateTracker*) tracker
fetchRecordZoneChangesOperationClass: (Class<CKKSFetchRecordZoneChangesOperation>) fetchRecordZoneChangesOperationClass
fetchRecordsOperationClass: (Class<CKKSFetchRecordsOperation>)fetchRecordsOperationClass
queryOperationClass:(Class<CKKSQueryOperation>)queryOperationClass
modifySubscriptionsOperationClass: (Class<CKKSModifySubscriptionsOperation>) modifySubscriptionsOperationClass
modifyRecordZonesOperationClass: (Class<CKKSModifyRecordZonesOperation>) modifyRecordZonesOperationClass
apsConnectionClass: (Class<CKKSAPSConnection>) apsConnectionClass;
- (NSOperation*) createSetupOperation: (bool) zoneCreated zoneSubscribed: (bool) zoneSubscribed;
- (CKKSResultOperation*) beginResetCloudKitZoneOperation;
- (void)handleCKLogin;
- (void)handleCKLogout;
- (void)cancelAllOperations;
- (bool)scheduleOperation: (NSOperation*) op;
- (bool)scheduleAccountStatusOperation: (NSOperation*) op;
- (bool)scheduleOperationWithoutDependencies:(NSOperation*)op;
- (void)waitUntilAllOperationsAreFinished;
- (void)waitForOperationsOfClass:(Class) operationClass;
- (void) dispatchSync: (bool (^)(void)) block;
- (void)resetSetup;
#endif
@end
#endif