import React

@objc(BlazeWidgetViewManagerBase)
class BlazeWidgetViewManagerBase: RCTViewManager {
    
    override class func requiresMainQueueSetup() -> Bool {
        true
    }
    
    @objc func reloadData(_ node: NSNumber,
                          isSilentRefresh: Bool) {
        RCTExecuteOnMainQueue { [weak self] in
            guard let self = self,
                  let widget = self.bridge.uiManager.view(forReactTag: node) as? BlazeWidgetBaseProtocol else { return }
            
            widget.reloadData(isSilentRefresh: isSilentRefresh)
        }
    }
    
    @objc func updateDataSource(_ node: NSNumber,
                                dataSource: [String : AnyHashable]?,
                                isSilentRefresh: Bool) {
        RCTExecuteOnMainQueue { [weak self] in
            guard let self = self,
                  let widget = self.bridge.uiManager.view(forReactTag: node) as? BlazeWidgetBaseProtocol else { return }
            
            widget.updateDataSource(dataSource: dataSource, isSilentRefresh: isSilentRefresh)
        }
    }
    
    @objc func play(_ node: NSNumber) {
        RCTExecuteOnMainQueue { [weak self] in
            guard let self = self,
                  let widget = self.bridge.uiManager.view(forReactTag: node) as? BlazeWidgetBaseProtocol else { return }
            
            widget.play()
        }
    }
    
    @objc func updateOverrideStyles(_ node: NSNumber,
                                    perItemStyleOverrides: [String : AnyHashable]?,
                                    shouldUpdateUi: Bool) {
        RCTExecuteOnMainQueue { [weak self] in
            guard let self = self,
                  let widget = self.bridge.uiManager.view(forReactTag: node) as? BlazeWidgetBaseProtocol else { return }
            
            widget.updateOverrideStyles(perItemStyleOverrides: perItemStyleOverrides, shouldUpdateUi: shouldUpdateUi)
        }
    }
    
    @objc func updateWidgetsUi(_ node: NSNumber) {
        RCTExecuteOnMainQueue { [weak self] in
            guard let self = self,
                  let widget = self.bridge.uiManager.view(forReactTag: node) as? BlazeWidgetBaseProtocol else { return }
            
            widget.updateWidgetsUi()
        }
    }

    
}
