//
//  Copyright © 2020 dahua. All rights reserved.
//

#import "LCAddDeviceInterface.h"
#import "LCNetworkRequestManager.h"
#import "TextDefine.h"

@implementation LCAddDeviceInterface

+ (void)getDeviceIntroductionForDeviceModel:(NSString *)deviceModel success:(void (^)(DHOMSIntroductionInfo *introductions))success
                       failure:(void (^)(LCError *error))failure {
    [[LCNetworkRequestManager manager] lc_POST:@"/deviceAddingProcessGuideInfoGet" parameters:@{ KEY_TOKEN: [LCApplicationDataManager token], KEY_DEVICE_MODEL_NAME: deviceModel } success:^(id _Nonnull objc) {
        DHOMSIntroductionInfo *introductions = [DHOMSIntroductionInfo mj_objectWithKeyValues:objc];
        if (introductions.updateTime == nil) {
            introductions.updateTime = @"";
        }
        if (success) {
            success(introductions);
        }
    } failure:^(LCError *_Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)checkDeviceIntroductionWithUpdateTime:(NSString *)updateTime success:(void (^)(BOOL isUpdated))success
                       failure:(void (^)(LCError *error))failure {
    [[LCNetworkRequestManager manager] lc_POST:@"/deviceAddingProcessGuideInfoCheck" parameters:@{ KEY_TOKEN: [LCApplicationDataManager token], KEY_UPDATETIME: updateTime } success:^(id _Nonnull objc) {
        BOOL update = [[objc objectForKey:@"isUpdated"] boolValue];
        if (success) {
            success(update);
        }
    } failure:^(LCError *_Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)queryAllProductWithDeviceType:(NSString *)deviceModel Success:(void (^)(NSDictionary *productList))success
                              failure:(void (^)(LCError *error))failure {
    if (deviceModel == nil || deviceModel.isNull) {
        //默认写Camera
        deviceModel = @"Camera";
    }

    [[LCNetworkRequestManager manager] lc_POST:@"/deviceModelList" parameters:@{ KEY_TOKEN: [LCApplicationDataManager token], KEY_DEVICE_TYPE: deviceModel } success:^(id _Nonnull objc) {
        NSMutableArray <DHOMSDeviceType *> *omsModel = [DHOMSDeviceType mj_objectArrayWithKeyValuesArray:[objc objectForKey:@"configList"]];
        NSArray <DHOMSDeviceType *> *modelArr = [NSArray arrayWithArray:omsModel];
        NSString *updateTimeStr = @"";
        if ([objc objectForKey:@"updateTime"] != nil) {
            updateTimeStr = [objc objectForKey:@"updateTime"];
        }
        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:modelArr,@"deviceTypeConfigs",updateTimeStr,@"updateTime", nil];
        if (success) {
            success(dic);
        }
    } failure:^(LCError *_Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)checkDeviceBindOrNotWithDevice:(NSString *)deviceId success:(void (^)(LCCheckDeviceBindOrNotInfo *))success failure:(void (^)(LCError *_Nonnull))failure
{
    [[LCNetworkRequestManager manager] lc_POST:@"/checkDeviceBindOrNot" parameters:@{ KEY_TOKEN: [LCApplicationDataManager token], KEY_DEVICE_ID: deviceId } success:^(id _Nonnull objc) {
        LCCheckDeviceBindOrNotInfo *info = [LCCheckDeviceBindOrNotInfo mj_objectWithKeyValues:objc];
        if (success) {
            success(info);
        }
    } failure:^(LCError *_Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)unBindDeviceInfoForDevice:(NSString *)deviceId DeviceModel:(nullable NSString *)deviceModel DeviceName:(NSString *)deviceName ncCode:(NSString *)ncCode success:(void (^)(DHUserDeviceBindInfo * info))success failure:(void (^)(LCError *error))failure {
    NSMutableDictionary * dic = [NSMutableDictionary dictionary];
    [dic setObject:[LCApplicationDataManager token] forKey:KEY_TOKEN];
    [dic setObject:deviceId forKey:KEY_DEVICE_ID];
    if (deviceModel && ![@"" isEqualToString:deviceModel]) {
        [dic setObject:deviceModel forKey:KEY_DT];
    }
    if (deviceName && ![@"" isEqualToString:deviceName]) {
        [dic setObject:deviceName forKey:KEY_DEVICE_MODEL_NAME];
    }
    if (ncCode && ![@"" isEqualToString:ncCode]) {
        [dic setObject:ncCode forKey:KEY_NC_CODE];
    }
    [[LCNetworkRequestManager manager] lc_POST:@"/unBindDeviceInfo" parameters:dic success:^(id _Nonnull objc) {
        DHUserDeviceBindInfo *info = [DHUserDeviceBindInfo mj_objectWithKeyValues:objc];
        if (info.brand == nil) {
            info.brand = @"";
        }
        if (info.modelName == nil) {
            info.modelName = @"";
        }
        if (info.deviceModel == nil) {
            info.deviceModel = @"";
        }
        if (success) {
            success(info);
        }
    } failure:^(LCError *_Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)deviceOnlineFor:(NSString *)deviceId success:(void (^)(LCDeviceOnlineInfo *_Nonnull))success failure:(void (^)(LCError *_Nonnull))failure {
    [[LCNetworkRequestManager manager] lc_POST:@"/deviceOnline" parameters:@{ KEY_TOKEN: [LCApplicationDataManager token], KEY_DEVICE_ID: deviceId } success:^(id _Nonnull objc) {
        LCDeviceOnlineInfo *info = [LCDeviceOnlineInfo mj_objectWithKeyValues:objc];
        if (success) {
            success(info);
        }
    } failure:^(LCError *_Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)bindDeviceWithDevice:(NSString *)deviceId Code:(NSString *)code success:(void (^)(void))success failure:(void (^)(LCError *_Nonnull))failure {
    [[LCNetworkRequestManager manager] lc_POST:@"/bindDevice" parameters:@{ KEY_TOKEN: [LCApplicationDataManager token], KEY_DEVICE_ID: deviceId, KEY_CODE: code } success:^(id _Nonnull objc) {
        if (success) {
            success();
        }
    } failure:^(LCError *_Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)timeZoneConfigByWeekWithDevice:(nonnull NSString *)deviceId AreaIndex:(NSInteger)areaIndex TimeZone:(NSInteger)timeZone BeginSunTime:(NSString *)beginSunTime EndSunTime:(NSString *)endSunTime success:(void (^)(void))success
                               failure:(void (^)(LCError *error))failure {
    NSMutableDictionary *res = [NSMutableDictionary dictionaryWithDictionary:@{ KEY_TOKEN: [LCApplicationDataManager token], KEY_DEVICE_ID: deviceId, KEY_AREAINDEX: [NSString stringWithFormat:@"%ld", (long)areaIndex], KEY_TIMEZONE: [NSString stringWithFormat:@"%ld", (long)timeZone] }];
    if (beginSunTime) {
        beginSunTime = [beginSunTime stringByAppendingString:@":00"];
        [res setObject:beginSunTime forKey:KEY_BEGIN_SUMMERTIME];
    }
    if (endSunTime) {
        endSunTime = [endSunTime stringByAppendingString:@":00"];
        [res setObject:endSunTime forKey:KEY_END_SUMMERTIME];
    }
    
    if (timeZone==0 && areaIndex == 0) {
        if (success) {
            success();
        }
        return;
    }

    [[LCNetworkRequestManager manager] lc_POST:@"/timeZoneConfigByWeek" parameters:res success:^(id _Nonnull objc) {
        if (success) {
            success();
        }
    } failure:^(LCError *_Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)timeZoneConfigByDateWithDevice:(nonnull NSString *)deviceId AreaIndex:(NSInteger)areaIndex TimeZone:(NSInteger)timeZone BeginSunTime:(NSString *)beginSunTime EndSunTime:(NSString *)endSunTime success:(void (^)(void))success
                               failure:(void (^)(LCError *error))failure {
    NSMutableDictionary *res = [NSMutableDictionary dictionaryWithDictionary:@{ KEY_TOKEN: [LCApplicationDataManager token], KEY_DEVICE_ID: deviceId, KEY_AREAINDEX: [NSString stringWithFormat:@"%ld", (long)areaIndex], KEY_TIMEZONE: [NSString stringWithFormat:@"%ld", (long)timeZone] }];
    if (beginSunTime) {
        beginSunTime = [beginSunTime stringByAppendingString:@":00"];
        [res setObject:beginSunTime forKey:KEY_BEGIN_SUMMERTIME];
    }
    if (endSunTime) {
        endSunTime = [endSunTime stringByAppendingString:@":00"];
        [res setObject:endSunTime forKey:KEY_END_SUMMERTIME];
    }
    if (timeZone==0 && areaIndex == 0) {
        if (success) {
            success();
        }
        return;
    }
    [[LCNetworkRequestManager manager] lc_POST:@"/timeZoneConfigByDay" parameters:res success:^(id _Nonnull objc) {
        if (success) {
            success();
        }
    } failure:^(LCError *_Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

@end