//
//  TuyaBLERNScannerModule.m
//  TuyaRnDemo
//
//  Created by 浩天 on 2019/2/28.
//  Copyright © 2019年 Facebook. All rights reserved.
//

#import "TuyaBLERNScannerModule.h"
#import <TuyaSmartActivatorKit/TuyaSmartActivatorKit.h>
#import <TuyaSmartBaseKit/TuyaSmartBaseKit.h>
#import <TuyaSmartDeviceKit/TuyaSmartDeviceKit.h>
#import <TuyaSmartBLEKit/TuyaSmartBLEManager+Biz.h>
#import "TuyaRNUtils+Network.h"
#import "YYModel.h"
#import "TuyaRNEventEmitter.h"

#define kTuyaRNActivatorModuleUUID @"uuid"
#define kTuyaRNActivatorModuleProductID @"productId"

// Bluetooth Pairing
static TuyaBLERNScannerModule * scannerInstance = nil;

@interface TuyaBLERNScannerModule()<TuyaSmartBLEManagerDelegate>

@property(copy, nonatomic) RCTPromiseResolveBlock promiseResolveBlock;
@property(copy, nonatomic) RCTPromiseRejectBlock promiseRejectBlock;
@property(copy, nonatomic) RCTResponseSenderBlock callbackSenderBlock;

@end

@implementation TuyaBLERNScannerModule
bool hasListeners;

RCT_EXPORT_MODULE(TuyaBLEScannerModule)

RCT_EXPORT_METHOD(startBluetoothScan:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter) {
  if (scannerInstance == nil) {
    scannerInstance = [TuyaBLERNScannerModule new];
  }

  [TuyaSmartBLEManager sharedInstance].delegate = scannerInstance;
  scannerInstance.promiseResolveBlock = resolver;
  scannerInstance.promiseRejectBlock = rejecter;

  [[TuyaSmartBLEManager sharedInstance] startListening:YES];
}

RCT_EXPORT_METHOD(stopBluetoothScan:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter) {
  [[TuyaSmartBLEManager sharedInstance] stopListening:YES];
}

RCT_EXPORT_METHOD(getActivatorDeviceInfo:(NSDictionary *)params resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter) {
  NSString *uuid = params[kTuyaRNActivatorModuleUUID];
  NSString *productId = params[kTuyaRNActivatorModuleProductID];
  [[TuyaSmartBLEManager sharedInstance] queryDeviceInfoWithUUID:uuid productId:productId success:^(NSDictionary *dict) {
      if (resolver) {
        resolver(dict);
      }
    } failure:^(NSError *error){
      [TuyaRNUtils rejecterWithError:error handler:rejecter];
  }]; 
}

-(void)startObserving {
    hasListeners = YES;
}

-(void)stopObserving {
    hasListeners = NO;
}


// - (void)didDiscoveryDeviceWithDeviceInfo:(TYBLEAdvModel *)deviceInfo {
//   if (hasListeners) {// Only send events if anyone is listening
//     [self sendEventWithName:@"startBluetoothScan" body:[deviceInfo yy_modelToJSONObject]];
//   }
//   // if (scannerInstance.callbackSenderBlock) {
//   //   self.callbackSenderBlock([deviceInfo yy_modelToJSONObject]);
//   //   // self.promiseResolveBlock([deviceInfo yy_modelToJSONObject]);
//   // }
// }

- (void) didDiscoveryDeviceWithDeviceInfo:(TYBLEAdvModel *)deviceInfo {
    [TuyaRNEventEmitter ty_sendEvent:kTYEventEmitterBLeEvent withBody:[deviceInfo yy_modelToJSONObject]];
}

@end
