#import <Foundation/Foundation.h>
#if OCTAGON
#import "keychain/ckks/CKKSCKAccountStateTracker.h"
#import "keychain/ckks/CKKSReachabilityTracker.h"
#import "keychain/ckks/CloudKitDependencies.h"
#import "keychain/ckks/CKKSAPSReceiver.h"
#import "keychain/ckks/CKKSGroupOperation.h"
NS_ASSUME_NONNULL_BEGIN
@interface CKKSZone : NSObject <CKKSZoneUpdateReceiver, CKKSAccountStateListener>
{
CKContainer* _container;
CKDatabase* _database;
CKRecordZone* _zone;
}
@property (readonly) NSString* zoneName;
@property CKKSGroupOperation* zoneSetupOperation;
@property (nullable) CKOperationGroup* zoneSetupOperationGroup;
@property bool zoneCreated;
@property bool zoneSubscribed;
@property (nullable) NSError* zoneCreatedError;
@property (nullable) NSError* zoneSubscribedError;
@property (readonly) bool halted;
@property CKKSAccountStatus accountStatus;
@property (readonly) CKContainer* container;
@property (readonly) CKDatabase* database;
@property (weak) CKKSCKAccountStateTracker* accountTracker;
@property (weak) CKKSReachabilityTracker* reachabilityTracker;
@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*)accountTracker
reachabilityTracker:(CKKSReachabilityTracker *)reachabilityTracker
fetchRecordZoneChangesOperationClass:(Class<CKKSFetchRecordZoneChangesOperation>)fetchRecordZoneChangesOperationClass
fetchRecordsOperationClass:(Class<CKKSFetchRecordsOperation>)fetchRecordsOperationClass
queryOperationClass:(Class<CKKSQueryOperation>)queryOperationClass
modifySubscriptionsOperationClass:(Class<CKKSModifySubscriptionsOperation>)modifySubscriptionsOperationClass
modifyRecordZonesOperationClass:(Class<CKKSModifyRecordZonesOperation>)modifyRecordZonesOperationClass
apsConnectionClass:(Class<CKKSAPSConnection>)apsConnectionClass;
- (CKKSResultOperation* _Nullable)deleteCloudKitZoneOperation:(CKOperationGroup* _Nullable)ckoperationGroup;
- (void)handleCKLogin;
- (CKKSResultOperation* _Nullable)handleCKLogin:(bool)zoneCreated zoneSubscribed:(bool)zoneSubscribed;
- (void)handleCKLogout;
- (void)initializeZone;
- (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)halt;
- (void)resetSetup;
@end
NS_ASSUME_NONNULL_END
#endif // OCTAGON