//
//  HomeHubWifiSearchSuccessViewController.m
//  OneCable
//
//  Created by nComz on 2017. 5. 11..
//  Copyright © 2017년 ntels. All rights reserved.
//

#import "HomeHubWifiSearchSuccessViewController.h"
#import "HomeHubWifiPasswdInputViewController.h"

@interface HomeHubWifiSearchSuccessViewController () <CustomCheckBoxDelegate> {
    
    BLEServiceHandler *bleService;
    BLEWLanModel *selectedWLanModel;
    
    
    //비밀번호 없는 경우
    
    BOOL updateSSID;
    BOOL updateBSSID;
    BOOL updateIPSet;
    BOOL updateIPAddr;
    
    NSTimer *_timer;
    NSInteger _elapsedSeconds;
    
}
@end

@implementation HomeHubWifiSearchTableViewCell

@end

@implementation HomeHubWifiSearchSuccessViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self initUI];
    [self prepareViewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    
    bleService.delegate = self;
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    
    bleService.delegate = nil;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
}

- (void)initUI {
    
    _imgvLoading.hidden = YES;
    _btnNext.enabled = NO;
    
    [self initTableViewAsDefaultStyle:_tableView];
}

- (void)prepareViewDidLoad {
    
    //ble
    bleService = [BLEServiceHandler sharedManager];
    
    updateSSID = updateBSSID = updateIPSet = updateIPAddr = NO;
    
    [_tableView reloadData];
}



-(void)startLoading:(BOOL)isStart {
    
    _imgvLoading.hidden = !isStart;
    
    if (isStart) {
        
        _elapsedSeconds = kMaxTimeOut*2;
        
        if (!_timer) {
            _timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateInclusionStatus) userInfo:nil repeats:YES];
        }
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            if ([_imgvLoading.layer animationForKey:@"SpinAnimation"] == nil) {
                CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
                animation.fromValue = [NSNumber numberWithFloat:0.0f];
                animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
                animation.duration = 2.0f;
                animation.repeatCount = INFINITY;
                [_imgvLoading.layer addAnimation:animation forKey:@"SpinAnimation"];
            }
        });
    }
    else {
        
        _elapsedSeconds = kMaxTimeOut;
        
        if (_timer) {
            [_timer invalidate];
            _timer = nil;
        }
        if ([_imgvLoading.layer animationForKey:@"SpinAnimation"] != nil) {
            [_imgvLoading.layer removeAnimationForKey:@"SpinAnimation"];
        }
        
    }
    
}

- (void)updateInclusionStatus {
    
    dispatch_async(dispatch_get_main_queue(), ^(void) {
        
        _elapsedSeconds--;
        
        if (_elapsedSeconds == 0) {
            
            //[self startLoading:NO];
            
            //실패
            [self startLoading:NO];
            [[JDFacade facade] alert:@"네트워크 연결에 실패하였습니다." completionHander:^{
                
                [self.navigationController popViewControllerAnimated:NO];
            }];
            
        }
    });
}


#pragma mark - UITableView DataSource & Delegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    return _wifiList.count;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    return 101.0f;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    HomeHubWifiSearchTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WifiSearchCellIdentifier"];
    
    BLEWLanModel *model = [_wifiList objectAtIndex:indexPath.row];
    
    cell.lblHubName.text = model.ssid;
    cell.chkBtn.selected = [selectedWLanModel isEqual:model];
    cell.imgvWifi.highlighted = !EQUALS(model.security, @"none");
    
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    [super tableView:tableView didSelectRowAtIndexPath:indexPath];
    
    BLEWLanModel *model = [_wifiList objectAtIndex:indexPath.row];
    selectedWLanModel = model;
    _btnNext.enabled = YES;
    [_tableView reloadData];
}


//#pragma mark - CustomCheckBox Delegate {
//- (void)didCheckBoxClicked:(id)sender {
//
//    CustomCheckBox *btn = sender;
//    btn.selected = !btn.selected;
//
//    selectedWLanModel = btn.value;
//    _btnNext.enabled = YES;
//
//    [_tableView reloadData];
//
//}


#pragma mark - user Event
- (IBAction)btnCancelTouched:(id)sender {
    
    [self.navigationController popToRootViewControllerAnimated:YES];
}

- (IBAction)btnNextTouched:(id)sender {
    
    NSLog(@"selectedWLanModel : %@", selectedWLanModel);
    
    if (selectedWLanModel != nil) {
        
        [bleService setWiFiSSID:selectedWLanModel.ssid];
        [bleService readAndNotifyCharacteristicUUID:kBLEChrStSSIDArg
                                           isNotify:NO];
    }
}


#pragma mark - ble delegate
- (void)BLEWiFiSSIDUpdate:(NSString*)ssid {
    
    NSLog(@"\nwifi search seccess BLEWiFiSSIDUpdate ssid : %@", selectedWLanModel.ssid);
    NSLog(@"ssid : %@", ssid);
    
    if (EQUALS(selectedWLanModel.ssid, ssid)) {
        
        if (EQUALS(selectedWLanModel.security, @"none")) {
            
            [self startLoading:YES];
            
            //1. write pass
            [bleService setWiFiPwd:@""];
            [self performSelector:@selector(BLESendEnableDHCP) withObject:nil afterDelay:1.0];
            
            updateSSID = updateBSSID = updateIPSet = updateIPAddr = NO;
            
        }
        else {
            
            HomeHubWifiPasswdInputViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"HomeHubWifiPasswdInputViewController" storyboardName:@"HomeHub"];
            vc.selectedWLanModel = selectedWLanModel;
            
            [self.navigationController pushViewController:vc animated:YES];
        }
    }
    else {
        
        //실패처리
        [[JDFacade facade] alertTitle:@"인터넷 연결 설정 실패"
                              message:@"인터넷 연결 설정에 실패하였습니다."];
        
    }
}


- (void)BLESendEnableDHCP {
    
    //2. set ip set arg chr
    [bleService enableDHCP];
    [bleService readAndNotifyCharacteristicUUID:kBLEChrStDHCPArg isNotify:NO];
    
}


//enableDHCP
- (void)BLEWiFiDHCPUpdate:(id)data {

    //3. apply chr
    [bleService applyWiFiSettingInfo];
    
}


//kBLEChrRdConInfo
- (void)BLEWiFiConnectionUpdate:(CBCharacteristic *)info {
    
    NSLog(@"\nwifi search seccess BLEWiFiConnectionUpdate!");
    
    NSString *value = [bleService hexStringValue:info] ;
    
    if (value.length > 0 &&
        EQUALS([value substringFromIndex:value.length-1], @"1")) {
        
        //5.
        [bleService readConnectionWiFiInfo];
    }
    else if (value.length > 0 &&
             EQUALS([value substringFromIndex:value.length-1], @"0")) {
        
    }
}

//readConnectionWiFiInfo
- (void)BLEWiFiConnectionInfoUpdateWithKey:(NSString *)kBLEChr
                                    result:(NSString *)result {
    
    NSLog(@"\nwifi search seccess BLEWiFiConnectionInfoUpdateWithKey") ;
    
    if (EQUALS(kBLEChr, kBLEChrRdSSID)) {
        updateSSID = YES;
    }
    else if(EQUALS(kBLEChr, kBLEChrRdBSSID)) {
        updateBSSID = YES;
    }
    else if(EQUALS(kBLEChr, kBLEChrRnIpSet)) {
        updateIPSet = YES;
    }
    else if(EQUALS(kBLEChr, kBLEChrRnIpAddr)) {
        updateIPAddr = YES;
    }
    
    // 연결 확인 완료
    if (updateSSID && updateBSSID && updateIPSet && updateIPAddr) {
        
        [self startLoading:NO];
        
        UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"HomeHubUpdateCompleteViewController" storyboardName:@"HomeHub"];
        
        [self.navigationController pushViewController:vc animated:YES];
        
    }
}

- (void)BLEDisConnected:(BTLEDeivceModel *)info {
    
    [[JDFacade facade] toast:@"홈허브와 연결할 수 없습니다."];
    [self.navigationController popToRootViewControllerAnimated:YES];
    
}


@end
