#import "RCTAppNexusVideoBannerManager.h"
#import "RCTAppNexusVideoBannerView.h"

#import "ANSDKSettings.h"

#if __has_include(<React/RCTBridge.h>)
#import <React/RCTBridge.h>
#import <React/RCTUIManager.h>
#import <React/RCTEventDispatcher.h>
#else
#import "RCTBridge.h"
#import "RCTUIManager.h"
#import "RCTEventDispatcher.h"
#endif

@implementation RCTAppNexusVideoBannerManager
  
RCT_EXPORT_MODULE();

RCT_EXPORT_VIEW_PROPERTY(placementId, NSString *)
RCT_EXPORT_VIEW_PROPERTY(didUserSkipAd, BOOL)
RCT_EXPORT_VIEW_PROPERTY(didUserClickAd, BOOL)
RCT_EXPORT_VIEW_PROPERTY(isAdMuted, BOOL)
RCT_EXPORT_VIEW_PROPERTY(isVideoTagReady, BOOL)
RCT_EXPORT_VIEW_PROPERTY(didVideoTagFail, BOOL)
RCT_EXPORT_VIEW_PROPERTY(adDuration, NSUInteger)
RCT_EXPORT_VIEW_PROPERTY(adPlayElapsedTime, NSUInteger)
RCT_EXPORT_VIEW_PROPERTY(creativeURL, NSString *)
RCT_EXPORT_VIEW_PROPERTY(vastURL, NSString *)
RCT_EXPORT_VIEW_PROPERTY(vastXML, NSString *)
RCT_EXPORT_VIEW_PROPERTY(descriptionOfFailure, NSString *)
RCT_EXPORT_VIEW_PROPERTY(failureNSError, NSError *)

RCT_EXPORT_VIEW_PROPERTY(onAdLoadSuccess, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onAdLoadFail, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onPlayStatusChange, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onEventChange, RCTDirectEventBlock)

RCT_EXTERN_METHOD(startPlayingVideoAdWithTag:(nonnull NSNumber *)node)
RCT_EXTERN_METHOD(stopPlayingVideoAdWithTag:(nonnull NSNumber *)node)
RCT_EXTERN_METHOD(reloadVideo:(nonnull NSNumber *)node)

- (instancetype)init
{
  self = [super init];
  if (self) {
    [ANSDKSettings sharedInstance].HTTPSEnabled = YES;
  }
  return self;
}
  
- (void)startPlayingVideoAdWithTag:(NSNumber *)node {
  dispatch_async(dispatch_get_main_queue(), ^{
    [(RCTAppNexusVideoBannerView *)[self.bridge.uiManager viewForReactTag:node] startPlayingVideoAd];
  });
}
  
- (void)stopPlayingVideoAdWithTag:(NSNumber *)node {
  dispatch_async(dispatch_get_main_queue(), ^{
    [(RCTAppNexusVideoBannerView *)[self.bridge.uiManager viewForReactTag:node] stopPlayingVideoAd];
  });
}
  
- (void)reloadVideo:(NSNumber *)node {
  dispatch_async(dispatch_get_main_queue(), ^{
    [(RCTAppNexusVideoBannerView *)[self.bridge.uiManager viewForReactTag:node] reloadVideo];
  });
}
  
- (UIView *)view
{
  return [RCTAppNexusVideoBannerView new];
}
  
+ (BOOL)requiresMainQueueSetup
{
  return YES;
}
  
@end
