#import <Foundation/Foundation.h>
#include <securityd/SecDbItem.h>
#import "keychain/ckks/CKKS.h"
#import "keychain/ckks/CKKSControlProtocol.h"
#if OCTAGON
#import "keychain/ckks/CloudKitDependencies.h"
#import "keychain/ckks/CKKSAPSReceiver.h"
#import "keychain/ckks/CKKSCKAccountStateTracker.h"
#import "keychain/ckks/CKKSLockStateTracker.h"
#import "keychain/ckks/CKKSRateLimiter.h"
#import "keychain/ckks/CKKSNotifier.h"
#import "keychain/ckks/CKKSCondition.h"
#import "keychain/ckks/CKKSPeer.h"
#endif
@class CKKSKeychainView, CKKSRateLimiter;
#if !OCTAGON
@interface CKKSViewManager : NSObject
#else
@interface CKKSViewManager : NSObject <CKKSControlProtocol, CKKSPeerProvider>
@property CKContainer* container;
@property CKKSCKAccountStateTracker* accountTracker;
@property CKKSLockStateTracker* lockStateTracker;
@property bool initializeNewZones;
@property CKKSCondition* completedSecCKKSInitialize;
@property CKKSRateLimiter* globalRateLimiter;
@property NSOperation* zoneStartupDependency;
- (instancetype)initCloudKitWithContainerName: (NSString*) containerName usePCS:(bool)usePCS;
- (instancetype)initWithContainerName: (NSString*) containerName
usePCS: (bool)usePCS
fetchRecordZoneChangesOperationClass: (Class<CKKSFetchRecordZoneChangesOperation>) fetchRecordZoneChangesOperationClass
fetchRecordsOperationClass: (Class<CKKSFetchRecordsOperation>)fetchRecordsOperationClass
queryOperationClass:(Class<CKKSQueryOperation>)queryOperationClass
modifySubscriptionsOperationClass: (Class<CKKSModifySubscriptionsOperation>) modifySubscriptionsOperationClass
modifyRecordZonesOperationClass: (Class<CKKSModifyRecordZonesOperation>) modifyRecordZonesOperationClass
apsConnectionClass: (Class<CKKSAPSConnection>) apsConnectionClass
nsnotificationCenterClass: (Class<CKKSNSNotificationCenter>) nsnotificationCenterClass
notifierClass: (Class<CKKSNotifier>) notifierClass
setupHold:(NSOperation*) setupHold;
- (CKKSKeychainView*)findView:(NSString*)viewName;
- (CKKSKeychainView*)findOrCreateView:(NSString*)viewName;
+ (CKKSKeychainView*)findOrCreateView:(NSString*)viewName;
- (void)setView: (CKKSKeychainView*) obj;
- (void)clearView:(NSString*) viewName;
- (NSDictionary<NSString *,NSString *>*)activeTLKs;
- (void)initializeZones;
- (NSString*)viewNameForItem: (SecDbItemRef) item;
- (void) handleKeychainEventDbConnection: (SecDbConnectionRef) dbconn source:(SecDbTransactionSource)txionSource added: (SecDbItemRef) added deleted: (SecDbItemRef) deleted;
-(void)setCurrentItemForAccessGroup:(SecDbItemRef)newItem
hash:(NSData*)newItemSHA1
accessGroup:(NSString*)accessGroup
identifier:(NSString*)identifier
viewHint:(NSString*)viewHint
replacing:(SecDbItemRef)oldItem
hash:(NSData*)oldItemSHA1
complete:(void (^) (NSError* operror)) complete;
-(void)getCurrentItemForAccessGroup:(NSString*)accessGroup
identifier:(NSString*)identifier
viewHint:(NSString*)viewHint
fetchCloudValue:(bool)fetchCloudValue
complete:(void (^) (NSString* uuid, NSError* operror)) complete;
- (NSString*)viewNameForAttributes: (NSDictionary*) item;
- (void)registerSyncStatusCallback: (NSString*) uuid callback: (SecBoolNSErrorCallback) callback;
- (void)cancelPendingOperations;
+ (instancetype) manager;
+ (instancetype) resetManager: (bool) reset setTo: (CKKSViewManager*) obj;
-(void)xpc24HrNotification;
- (xpc_endpoint_t)xpcControlEndpoint;
- (CKKSKeychainView*)restartZone:(NSString*)viewName;
-(NSSet*)viewList;
-(void)notifyNewTLKsInKeychain;
-(void)syncBackupAndNotifyAboutSync;
- (CKKSSelves*)fetchSelfPeers:(NSError* __autoreleasing *)error;
- (NSSet<id<CKKSPeer>>*)fetchTrustedPeers:(NSError* __autoreleasing *)error;
- (void)sendSelfPeerChangedUpdate;
- (void)sendTrustedPeerSetChangedUpdate;
#endif // OCTAGON
@end