//
//  CircleStoryManager.m
//  react-native-firework-sdk
//

#import <React/RCTBridgeModule.h>
#import <React/RCTViewManager.h>
#import <React/RCTUIManager.h>

#if __has_include(<react_native_firework_sdk/react_native_firework_sdk-Swift.h>)
#import <react_native_firework_sdk/react_native_firework_sdk-Swift.h>
#else
#import "react_native_firework_sdk-Swift.h"
#endif

@interface RCT_EXTERN_REMAP_MODULE(FWCircleStory, FWCircleStoryManager, NSObject)

RCT_CUSTOM_VIEW_PROPERTY(source, CircleStorySourceType, CircleStory) {
    if (json) {
        CircleStorySourceType sourceType = [RCTConvert circleStorySourceType:json];
        view.sourceType = sourceType;
    }
}
RCT_EXPORT_VIEW_PROPERTY(channel, NSString)
RCT_EXPORT_VIEW_PROPERTY(playlist, NSString)
RCT_EXPORT_VIEW_PROPERTY(playlistGroup, NSString)
RCT_EXPORT_VIEW_PROPERTY(dynamicContentParameters, NSDictionary)
RCT_EXPORT_VIEW_PROPERTY(hashtagFilterExpression, NSString)
RCT_EXPORT_VIEW_PROPERTY(productIds, NSArray)
RCT_EXPORT_VIEW_PROPERTY(contentId, NSString)

RCT_CUSTOM_VIEW_PROPERTY(circleStoryConfiguration, CircleStoryConfiguration, CircleStory) {
    CircleStoryConfiguration *config = [RCTConvert circleStoryConfiguration:json];
    view.circleStoryConfiguration = config;
}
RCT_CUSTOM_VIEW_PROPERTY(videoPlayerConfiguration, VideoPlayerConfiguration, CircleStory) {
    VideoPlayerConfiguration *config = [RCTConvert videoPlayerConfiguration:json];
    view.videoPlayerConfiguration = config;
}
RCT_CUSTOM_VIEW_PROPERTY(adConfiguration, AdConfiguration, CircleStory) {
    AdConfiguration *config = [RCTConvert adConfiguration:json];
    view.adConfiguration = config;
}

RCT_EXPORT_VIEW_PROPERTY(onCircleStoryLoadFinished, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onCircleStoryEmpty, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onCircleStoryDidStartPictureInPicture, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onCircleStoryDidStopPictureInPicture, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onCircleStoryGetFeedId, RCTBubblingEventBlock)

RCT_EXPORT_METHOD(refresh:(nonnull NSNumber *)reactTag) {
    [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) {
        CircleStory *view = (CircleStory *)(viewRegistry[reactTag]);
        if (!view || ![view isKindOfClass:[CircleStory class]]) {
            RCTLogError(@"Cannot find NativeView with tag #%@", reactTag);
            return;
        }
        [view refresh];
    }];
}

@end
