/**
 * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
 *
 * Do not edit this file as changes may cause incorrect behavior and will be lost
 * once the code is regenerated.
 *
 * @generated by codegen project: GenerateModuleObjCpp
 *
 * We create an umbrella header (and corresponding implementation) here since
 * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
 * must have a single output. More files => more genrule()s => slower builds.
 */

#ifndef __cplusplus
#error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
#endif

// Avoid multiple includes of RNFBFirestoreTurboModules symbols
#ifndef RNFBFirestoreTurboModules_H
#define RNFBFirestoreTurboModules_H

#import <Foundation/Foundation.h>
#import <RCTRequired/RCTRequired.h>
#import <RCTTypeSafety/RCTConvertHelpers.h>
#import <RCTTypeSafety/RCTTypedModuleConstants.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTCxxConvert.h>
#import <React/RCTManagedPointer.h>
#import <ReactCommon/RCTTurboModule.h>
#import <optional>
#import <vector>


NS_ASSUME_NONNULL_BEGIN

@protocol NativeRNFBTurboFirestoreSpec <RCTBridgeModule, RCTTurboModule>

- (void)setLogLevel:(NSString *)logLevel;
- (void)loadBundle:(NSString *)appName
        databaseId:(NSString *)databaseId
            bundle:(NSString *)bundle
           resolve:(RCTPromiseResolveBlock)resolve
            reject:(RCTPromiseRejectBlock)reject;
- (void)clearPersistence:(NSString *)appName
              databaseId:(NSString *)databaseId
                 resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject;
- (void)waitForPendingWrites:(NSString *)appName
                  databaseId:(NSString *)databaseId
                     resolve:(RCTPromiseResolveBlock)resolve
                      reject:(RCTPromiseRejectBlock)reject;
- (void)disableNetwork:(NSString *)appName
            databaseId:(NSString *)databaseId
               resolve:(RCTPromiseResolveBlock)resolve
                reject:(RCTPromiseRejectBlock)reject;
- (void)enableNetwork:(NSString *)appName
           databaseId:(NSString *)databaseId
              resolve:(RCTPromiseResolveBlock)resolve
               reject:(RCTPromiseRejectBlock)reject;
- (void)useEmulator:(NSString *)appName
         databaseId:(NSString *)databaseId
               host:(NSString *)host
               port:(double)port;
- (void)settings:(NSString *)appName
      databaseId:(NSString *)databaseId
        settings:(NSDictionary *)settings
         resolve:(RCTPromiseResolveBlock)resolve
          reject:(RCTPromiseRejectBlock)reject;
- (void)terminate:(NSString *)appName
       databaseId:(NSString *)databaseId
          resolve:(RCTPromiseResolveBlock)resolve
           reject:(RCTPromiseRejectBlock)reject;
- (void)persistenceCacheIndexManager:(NSString *)appName
                          databaseId:(NSString *)databaseId
                         requestType:(double)requestType
                             resolve:(RCTPromiseResolveBlock)resolve
                              reject:(RCTPromiseRejectBlock)reject;
- (void)addSnapshotsInSync:(NSString *)appName
                databaseId:(NSString *)databaseId
                listenerId:(double)listenerId;
- (void)removeSnapshotsInSync:(NSString *)appName
                   databaseId:(NSString *)databaseId
                   listenerId:(double)listenerId;

@end

@interface NativeRNFBTurboFirestoreSpecBase : NSObject {
@protected
facebook::react::EventEmitterCallback _eventEmitterCallback;
}
- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper;


@end

namespace facebook::react {
  /**
   * ObjC++ class for module 'NativeRNFBTurboFirestore'
   */
  class JSI_EXPORT NativeRNFBTurboFirestoreSpecJSI : public ObjCTurboModule {
  public:
    NativeRNFBTurboFirestoreSpecJSI(const ObjCTurboModule::InitParams &params);
  };
} // namespace facebook::react

@protocol NativeRNFBTurboFirestoreCollectionSpec <RCTBridgeModule, RCTTurboModule>

- (void)namedQueryOnSnapshot:(NSString *)appName
                  databaseId:(NSString *)databaseId
                   queryName:(NSString *)queryName
                        type:(NSString *)type
                     filters:(NSArray *)filters
                      orders:(NSArray *)orders
                     options:(NSDictionary *)options
                  listenerId:(double)listenerId
       snapshotListenOptions:(NSDictionary *)snapshotListenOptions;
- (void)collectionOnSnapshot:(NSString *)appName
                  databaseId:(NSString *)databaseId
                        path:(NSString *)path
                        type:(NSString *)type
                     filters:(NSArray *)filters
                      orders:(NSArray *)orders
                     options:(NSDictionary *)options
                  listenerId:(double)listenerId
       snapshotListenOptions:(NSDictionary *)snapshotListenOptions;
- (void)collectionOffSnapshot:(NSString *)appName
                   databaseId:(NSString *)databaseId
                   listenerId:(double)listenerId;
- (void)namedQueryGet:(NSString *)appName
           databaseId:(NSString *)databaseId
            queryName:(NSString *)queryName
                 type:(NSString *)type
              filters:(NSArray *)filters
               orders:(NSArray *)orders
              options:(NSDictionary *)options
           getOptions:(NSDictionary *)getOptions
              resolve:(RCTPromiseResolveBlock)resolve
               reject:(RCTPromiseRejectBlock)reject;
- (void)collectionGet:(NSString *)appName
           databaseId:(NSString *)databaseId
                 path:(NSString *)path
                 type:(NSString *)type
              filters:(NSArray *)filters
               orders:(NSArray *)orders
              options:(NSDictionary *)options
           getOptions:(NSDictionary *)getOptions
              resolve:(RCTPromiseResolveBlock)resolve
               reject:(RCTPromiseRejectBlock)reject;
- (void)collectionCount:(NSString *)appName
             databaseId:(NSString *)databaseId
                   path:(NSString *)path
                   type:(NSString *)type
                filters:(NSArray *)filters
                 orders:(NSArray *)orders
                options:(NSDictionary *)options
                resolve:(RCTPromiseResolveBlock)resolve
                 reject:(RCTPromiseRejectBlock)reject;
- (void)aggregateQuery:(NSString *)appName
            databaseId:(NSString *)databaseId
                  path:(NSString *)path
                  type:(NSString *)type
               filters:(NSArray *)filters
                orders:(NSArray *)orders
               options:(NSDictionary *)options
      aggregateQueries:(NSArray *)aggregateQueries
               resolve:(RCTPromiseResolveBlock)resolve
                reject:(RCTPromiseRejectBlock)reject;
- (void)pipelineExecute:(NSString *)appName
             databaseId:(NSString *)databaseId
               pipeline:(NSDictionary *)pipeline
                options:(NSDictionary *)options
                resolve:(RCTPromiseResolveBlock)resolve
                 reject:(RCTPromiseRejectBlock)reject;

@end

@interface NativeRNFBTurboFirestoreCollectionSpecBase : NSObject {
@protected
facebook::react::EventEmitterCallback _eventEmitterCallback;
}
- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper;


@end

namespace facebook::react {
  /**
   * ObjC++ class for module 'NativeRNFBTurboFirestoreCollection'
   */
  class JSI_EXPORT NativeRNFBTurboFirestoreCollectionSpecJSI : public ObjCTurboModule {
  public:
    NativeRNFBTurboFirestoreCollectionSpecJSI(const ObjCTurboModule::InitParams &params);
  };
} // namespace facebook::react
namespace JS {
  namespace NativeRNFBTurboFirestoreDocument {
    struct FirestoreSnapshotListenOptions {
      std::optional<bool> includeMetadataChanges() const;
      NSString *source() const;

      FirestoreSnapshotListenOptions(NSDictionary *const v) : _v(v) {}
    private:
      NSDictionary *_v;
    };
  }
}

@interface RCTCxxConvert (NativeRNFBTurboFirestoreDocument_FirestoreSnapshotListenOptions)
+ (RCTManagedPointer *)JS_NativeRNFBTurboFirestoreDocument_FirestoreSnapshotListenOptions:(id)json;
@end
namespace JS {
  namespace NativeRNFBTurboFirestoreDocument {
    struct SpecDocumentGetGetOptions {
      NSString *source() const;

      SpecDocumentGetGetOptions(NSDictionary *const v) : _v(v) {}
    private:
      NSDictionary *_v;
    };
  }
}

@interface RCTCxxConvert (NativeRNFBTurboFirestoreDocument_SpecDocumentGetGetOptions)
+ (RCTManagedPointer *)JS_NativeRNFBTurboFirestoreDocument_SpecDocumentGetGetOptions:(id)json;
@end
@protocol NativeRNFBTurboFirestoreDocumentSpec <RCTBridgeModule, RCTTurboModule>

- (void)documentOnSnapshot:(NSString *)appName
                databaseId:(NSString *)databaseId
                      path:(NSString *)path
                listenerId:(double)listenerId
     snapshotListenOptions:(JS::NativeRNFBTurboFirestoreDocument::FirestoreSnapshotListenOptions &)snapshotListenOptions;
- (void)documentOffSnapshot:(NSString *)appName
                 databaseId:(NSString *)databaseId
                 listenerId:(double)listenerId;
- (void)documentGet:(NSString *)appName
         databaseId:(NSString *)databaseId
               path:(NSString *)path
         getOptions:(JS::NativeRNFBTurboFirestoreDocument::SpecDocumentGetGetOptions &)getOptions
            resolve:(RCTPromiseResolveBlock)resolve
             reject:(RCTPromiseRejectBlock)reject;
- (void)documentDelete:(NSString *)appName
            databaseId:(NSString *)databaseId
                  path:(NSString *)path
               resolve:(RCTPromiseResolveBlock)resolve
                reject:(RCTPromiseRejectBlock)reject;
- (void)documentSet:(NSString *)appName
         databaseId:(NSString *)databaseId
               path:(NSString *)path
               data:(NSDictionary *)data
            options:(NSDictionary *)options
            resolve:(RCTPromiseResolveBlock)resolve
             reject:(RCTPromiseRejectBlock)reject;
- (void)documentUpdate:(NSString *)appName
            databaseId:(NSString *)databaseId
                  path:(NSString *)path
                  data:(NSDictionary *)data
               resolve:(RCTPromiseResolveBlock)resolve
                reject:(RCTPromiseRejectBlock)reject;
- (void)documentBatch:(NSString *)appName
           databaseId:(NSString *)databaseId
               writes:(NSArray *)writes
              resolve:(RCTPromiseResolveBlock)resolve
               reject:(RCTPromiseRejectBlock)reject;

@end

@interface NativeRNFBTurboFirestoreDocumentSpecBase : NSObject {
@protected
facebook::react::EventEmitterCallback _eventEmitterCallback;
}
- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper;


@end

namespace facebook::react {
  /**
   * ObjC++ class for module 'NativeRNFBTurboFirestoreDocument'
   */
  class JSI_EXPORT NativeRNFBTurboFirestoreDocumentSpecJSI : public ObjCTurboModule {
  public:
    NativeRNFBTurboFirestoreDocumentSpecJSI(const ObjCTurboModule::InitParams &params);
  };
} // namespace facebook::react

@protocol NativeRNFBTurboFirestoreTransactionSpec <RCTBridgeModule, RCTTurboModule>

- (void)transactionBegin:(NSString *)appName
              databaseId:(NSString *)databaseId
           transactionId:(double)transactionId
             maxAttempts:(double)maxAttempts;
- (void)transactionGetDocument:(NSString *)appName
                    databaseId:(NSString *)databaseId
                 transactionId:(double)transactionId
                          path:(NSString *)path
                       resolve:(RCTPromiseResolveBlock)resolve
                        reject:(RCTPromiseRejectBlock)reject;
- (void)transactionDispose:(NSString *)appName
                databaseId:(NSString *)databaseId
             transactionId:(double)transactionId;
- (void)transactionApplyBuffer:(NSString *)appName
                    databaseId:(NSString *)databaseId
                 transactionId:(double)transactionId
                 commandBuffer:(NSArray *)commandBuffer;

@end

@interface NativeRNFBTurboFirestoreTransactionSpecBase : NSObject {
@protected
facebook::react::EventEmitterCallback _eventEmitterCallback;
}
- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper;


@end

namespace facebook::react {
  /**
   * ObjC++ class for module 'NativeRNFBTurboFirestoreTransaction'
   */
  class JSI_EXPORT NativeRNFBTurboFirestoreTransactionSpecJSI : public ObjCTurboModule {
  public:
    NativeRNFBTurboFirestoreTransactionSpecJSI(const ObjCTurboModule::InitParams &params);
  };
} // namespace facebook::react


inline std::optional<bool> JS::NativeRNFBTurboFirestoreDocument::FirestoreSnapshotListenOptions::includeMetadataChanges() const
{
  id const p = _v[@"includeMetadataChanges"];
  return RCTBridgingToOptionalBool(p);
}
inline NSString *JS::NativeRNFBTurboFirestoreDocument::FirestoreSnapshotListenOptions::source() const
{
  id const p = _v[@"source"];
  return RCTBridgingToOptionalString(p);
}
inline NSString *JS::NativeRNFBTurboFirestoreDocument::SpecDocumentGetGetOptions::source() const
{
  id const p = _v[@"source"];
  return RCTBridgingToOptionalString(p);
}

NS_ASSUME_NONNULL_END
#endif // RNFBFirestoreTurboModules_H
