#if OCTAGON
#import <Foundation/Foundation.h>
#import "OTLocalStore.h"
#import "OTCloudStore.h"
#import "OTEscrowKeys.h"
#import "OTIdentity.h"
#import "OTBottledPeer.h"
#import "OTBottledPeerSigned.h"
#import "OTRamping.h"
#import "OTDefines.h"
#import "OTPreflightInfo.h"
#import "keychain/ckks/CKKSLockStateTracker.h"
NS_ASSUME_NONNULL_BEGIN
@protocol OTContextIdentityProvider <NSObject>
- (nullable OTIdentity *) currentIdentity:(NSError**) error;
@end
@interface OTContext : NSObject
@property (nonatomic, readonly) NSString* contextID;
@property (nonatomic, readonly) NSString* dsid;
@property (nonatomic, readonly) OTCloudStore* cloudStore;
@property (nonatomic, readonly) CKKSLockStateTracker* lockStateTracker;
@property (nonatomic, readonly) CKKSAccountStateTracker* accountTracker;
@property (nonatomic, readonly) CKKSReachabilityTracker *reachabilityTracker;
- (nullable instancetype) initWithContextID:(NSString*)contextID
dsid:(NSString*)dsid
localStore:(OTLocalStore*)localStore
cloudStore:(nullable OTCloudStore*)cloudStore
identityProvider:(id <OTContextIdentityProvider>)identityProvider
error:(NSError**)error;
- (nullable OTBottledPeerSigned *) restoreFromEscrowRecordID:(NSString*)escrowRecordID
secret:(NSData*)secret
error:(NSError**)error;
- (NSData* _Nullable) makeMeSomeEntropy:(int)requiredLength;
- (nullable OTPreflightInfo*) preflightBottledPeer:(NSString*)contextID
entropy:(NSData*)entropy
error:(NSError**)error;
- (BOOL)scrubBottledPeer:(NSString*)contextID
bottleID:(NSString*)bottleID
error:(NSError**)error;
-(BOOL)updateAllBottlesForPeerID:(NSString*)peerID
newSigningKey:(SFECKeyPair*)newSigningKey
newEncryptionKey:(SFECKeyPair*)newEncryptionKey
error:(NSError**)error;
-(OctagonBottleCheckState)doesThisDeviceHaveABottle:(NSError**)error;
@end
NS_ASSUME_NONNULL_END
#endif