//
//  DynatraceRNBridge.h
//

#ifndef DynatraceRNBridge_h
#define DynatraceRNBridge_h

#import <Dynatrace/Dynatrace.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
#import "ConfigurationSubscriber.h"

@interface DynatraceRNBridge : RCTEventEmitter <RCTBridgeModule>
- (void) newAction:(NSString *)name key:(NSString *)key parentAction:(DTXAction *)parentAction;
- (DTXAction *) getAction:(NSString *)key;
- (BOOL) shouldWorkOnIosWithPlatform: (NSString *) platform;
@end

@interface HybridBridge : NSObject
+ (void)forwardEvent:(NSDictionary<NSString*,id>* _Nullable)fields NS_SWIFT_NAME(forwardEvent(fields:));
+ (void)forwardAppStartEvent:(NSDictionary<NSString*,id>* _Nullable)fields keys:(NSArray<NSString*>* _Nullable)keys NS_SWIFT_NAME(forwardEvent(fields:keys:));
+ (void)startView:(NSDictionary<NSString*,id>* _Nullable)fields NS_SWIFT_NAME(startView(fields:));
+ (void)stopView;
+ (void)addConfigurationSubscriber:(id<ConfigurationSubscriber>)subscriber;
@end

typedef enum : NSUInteger {
    DTXActionPlatformJavaScript = 1,
    DTXActionPlatformXamarin,
    DTXActionPlatformCustom = 10
} DTXActionPlatformType;

@interface DTXAction (ExternalAgents)
+ (void)reportExternalCrashForPlatformType:(DTXActionPlatformType)platformType crashName:(NSString*)crashName reason:(NSString*)reason stacktrace:(NSString*)stacktrace;
+ (DTXAction*)integrateActionWithName:(NSString*)actionName;
+ (DTX_StatusCode)reportExternalErrorForPlatformType:(DTXActionPlatformType)platformType errorName:(NSString*)errorName errorValue:(NSString*)errorValue reason:(NSString*)reason stacktrace:(NSString*)stacktrace;
- (DTX_StatusCode)reportExternalErrorForPlatformType:(DTXActionPlatformType)platformType errorName:(NSString*)errorName errorValue:(NSString*)errorValue reason:(NSString*)reason stacktrace:(NSString*)stacktrace;
@end

@interface DTXAction (CrossPlatform)
- (DTX_StatusCode)internalReportError:(NSString* _Nonnull)errorName errorValue:(int)errorValue;
@end

@interface Dynatrace (Events)
+ (void)sendBizEventWithType:(NSString *)type attributes:(NSDictionary<NSString *, id> *_Nullable)attributes;
@end

#endif /* DynatraceRNBridge_h */
