//
//  FYSDK.h
//  HelloDemo
//
//  Created by 初程程 on 2019/3/22.
//  Copyright © 2019年 Facebook. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <React/RCTBridge.h>
#import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>
#import <IMLDeviceCenter/IMLDeviceCenter.h>
#import <IMSIotSmart/IMSIotSmart.h>
#import <IMSThingCapability/IMSDiscoveryRegistry.h>
#import <IMSThingCapability/IMSSubDeviceService.h>
#import <IMSThingCapability/IMSThingManager.h>
#import "AliLiving.h"

NS_ASSUME_NONNULL_BEGIN

@interface FYSDK : NSObject
@property (nonatomic, weak) AliLiving *mRnModule;

@property (nonatomic ,copy)void(^preCheckBlock)(BOOL success,NSError *err);
@property (nonatomic ,copy)void(^provisionPrepareBlock)(NSInteger state);
@property (nonatomic ,copy)void(^provisioningBlock)();
//@property (nonatomic ,copy)void(^provisionStatusBlock)(NSDictionary *statusDict);
@property (nonatomic ,copy)void(^provisionStatusPhoneApBlock)(void);
@property (nonatomic ,copy)void(^provisionStatusSoftApBlock)(int status, NSDictionary *dic);
@property (nonatomic ,copy)void(^provisionStatusBleConfigBlock)(int status, NSDictionary *dic);
@property (nonatomic ,copy)void(^provisionStatusQRBlock)(NSString *qrcode);
@property (nonatomic ,copy)void(^provisionedResultBlock)(IMLCandDeviceModel *result,NSError *err);

// 认领过程中临时保存，以便被 AliLiving.m 中调用
@property (nonatomic, strong) NSString *iotId;

/**
   FYSDK单例
 
   @return FYSDK实例
 */
+ (FYSDK *)sharedInstance;
/**
  启动设备发现
 */
- (void)startScanLocalDevice:(void(^)(NSDictionary *deviceDict ,NSError *err))block filterParams:(NSDictionary *)filterParams unclaimed:(BOOL)unclaimed;
/**
  停止设备发现
 */
- (void)stopScanLocalDevice;

- (void)breezeSubDevLogin:(NSString *)productKey
               macAddress:(NSString *)macAddress
                     ssid:(NSString *)ssid
                 password:(NSString *)password
                 resolver:(RCTPromiseResolveBlock)resolve
                 rejecter:(RCTPromiseRejectBlock)reject;

/**
  添加设备配网
 
  @param mac 设备 mac
  @param iotId 设备 iotId
  @param ssid 热点 ssid
  @param password 热点 password
 */
- (void)wifiConnect:(NSString *)mac
              iotId:(NSString *)iotId
               ssid:(NSString *)ssid
           password:(NSString *)password
           resolver:(RCTPromiseResolveBlock)resolve
           rejecter:(RCTPromiseRejectBlock)reject;

- (void)stopToogle;
/**
  停止设备配网流程
 */
- (void)stopAddDevice;

- (void)notifyWiFiStatus:(NSString *)iotId status:(DeviceWifiStatusType)status;

/**
  添加配网的wifi名和wifi密码
  @param wifiName 热点 ssid
  @param wifiPassword 热点 password
  @param timeout 单位秒 目前最短只能设置60S
 */
- (void)toggleProvisionWithName:(NSString *)wifiName
                   wifiPassword:(NSString *)wifiPassword
                        timeout:(int)timeout;
/**
   获取设备token
   @param productKey  设备pk
   @param deviceName  设备dn
   @param timeout     超时时间
 
   @return void
 */
- (void)getDeviceTokenWithProductKey:(NSString *)productKey
                          deviceName:(NSString *)deviceName
                             timeout:(NSUInteger)timeout
                               block:(void(^)(NSString *token))block;
@end

NS_ASSUME_NONNULL_END
