#import "RNNativeQiniu.h"
#import <QiniuSDK.h>
#import <QNFixedZone.h>
#import "QNTransactionManager.h"


NSString *const UploadProgresseEventName = @"uploadProgress";

@implementation RNNativeQiniu

QNUploadManager *upManager;
BOOL cancelFlg;

- (NSArray<NSString *> *)supportedEvents
{
    return @[UploadProgresseEventName];
}


RCT_EXPORT_MODULE()

RCT_EXPORT_METHOD(config:(BOOL)useHttps useConcurrentResumeUpload:(BOOL)useConcurrentResumeUpload concurrentTaskCount:(int)concurrentTaskCount timeoutInterval:(int)timeoutInterval){
    QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
        builder.useHttps = useHttps;
        builder.useConcurrentResumeUpload = YES; // 开启并发上传，默认为 NO
        builder.concurrentTaskCount = concurrentTaskCount; // 默认并行线程数为 3
        builder.timeoutInterval=timeoutInterval;
    }];
    upManager=[[QNUploadManager alloc] initWithConfiguration:config];
}

RCT_EXPORT_METHOD(cancel){
    cancelFlg=true;
}


RCT_EXPORT_METHOD(upload:(NSString *)filePath key:(NSString *)key token:(NSString *)token findEventsWithResolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
    cancelFlg=false;
    QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil progressHandler:^(NSString *key, float percent) {
        [self sendEventWithName:UploadProgresseEventName body:@{@"name": UploadProgresseEventName,@"key":key,@"percent":@(percent)}];
    } params:nil checkCrc:NO cancellationSignal:^BOOL{
        return  cancelFlg;
    }];

    [upManager putFile:filePath key:key token:token complete: ^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
        NSDictionary *dic =[NSDictionary dictionaryWithObjectsAndKeys:@(info.statusCode),@"status",info.error,@"error",nil];
        resolve(dic);
    } option:uploadOption];
}

@end

