//
//  PlayerDeckManager.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(FWPlayerDeck, FWPlayerDeckManager, NSObject)

RCT_CUSTOM_VIEW_PROPERTY(source, PlayerDeckSourceType, PlayerDeck) {
    if (json) {
        PlayerDeckSourceType sourceType = [RCTConvert playerDeckSourceType: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(playerDeckConfiguration, PlayerDeckConfiguration, PlayerDeck) {
    PlayerDeckConfiguration *config = [RCTConvert playerDeckConfiguration:json];
    view.playerDeckConfig = config;
}

RCT_CUSTOM_VIEW_PROPERTY(videoPlayerConfiguration, VideoPlayerConfiguration, PlayerDeck) {
    VideoPlayerConfiguration *config = [RCTConvert videoPlayerConfiguration:json];
    view.playerViewConfig = config;
}

RCT_EXPORT_VIEW_PROPERTY(onPlayerDeckLoadFinished, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onPlayerDeckEmpty, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onPlayerDeckDidStartPictureInPicture, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onPlayerDeckDidStopPictureInPicture, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onPlayerDeckGetFeedId, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onPlayerDeckVideosLoaded, RCTBubblingEventBlock)

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

@end
