//
//  HintViewController.m
//  LCOpenSDKDemo
//
//  Created by chenjian on 16/7/11.
//  Copyright (c) 2016å¹´ lechange. All rights reserved.
//
#import "LCOpenSDK_Prefix.h"
#import "DeviceViewController.h"
#import "AddDeviceViewController.h"
#import "SoftAPConnectViewController.h"
#import <Foundation/Foundation.h>
#import <SystemConfiguration/CaptiveNetwork.h>

typedef NS_ENUM(NSInteger, DeviceListState) {
    Normal = 0,
    HasChanged,
};

@interface AddDeviceViewController () {
    LCOpenSDK_ConfigWIfi* m_configWifi;
    id info;

    id devView;
    DeviceListState deviceListState;
    LCOpenSDK_SoftAP* m_SoftAP;
    SoftAPConnectViewController* m_softAPView;
    NSString *m_deviceId;
    NSString *m_deviceKey;
    NSString *m_wifiPassword;
}
@end

@implementation AddDeviceViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:NSLocalizedString(ADD_DEVICE_TITLE_TXT, nil)];

    UIButton* left = [UIButton buttonWithType:UIButtonTypeCustom];
    [left setFrame:CGRectMake(0, 0, 50, 30)];
    UIImage* imgLeft = [UIImage leChangeImageNamed:Back_Btn_Png];

    [left setBackgroundImage:imgLeft forState:UIControlStateNormal];
    [left addTarget:self action:@selector(onBack:) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem* leftBtn = [[UIBarButtonItem alloc] initWithCustomView:left];
    [item setLeftBarButtonItem:leftBtn animated:NO];
    [super.m_navigationBar pushNavigationItem:item animated:NO];

    [self.view addSubview:super.m_navigationBar];
    
    [self.m_btnWifi setImage:[UIImage leChangeImageNamed:AddDevice_Wifi_Png] forState:UIControlStateNormal];
    [self.m_btnWired setImage:[UIImage leChangeImageNamed:AddDevice_Wired_Png] forState:UIControlStateNormal];
    [self.m_btnSoftAP setImage:[UIImage leChangeImageNamed:AddDevice_SoftAp_Png] forState:UIControlStateNormal];
    deviceListState = Normal;
    self.m_lblHint.layer.masksToBounds = YES;
    self.m_lblHint.numberOfLines = 0;
    
    self.m_lblDeviceSN.text = NSLocalizedString(DEVICE_ID_TXT, nil);
    self.m_lblDeviceKey.text = NSLocalizedString(DEVICE_SCCODE_TXT, nil);
    self.m_lblSsid.text = NSLocalizedString(WIFI_PASSWORD_TIP_TXT, nil);
    
    self.m_textSerial.text = NSLocalizedString(DEVICE_ID_TIP_TXT, nil);
    self.m_textSerial.delegate = self;
    self.m_textSerial.clearButtonMode = UITextFieldViewModeWhileEditing;
    

    self.m_textDeviceKey.text = NSLocalizedString(DEVICE_KEY_TIP_TXT, nil);
    self.m_textDeviceKey.delegate = self;
    self.m_textDeviceKey.clearButtonMode = UITextFieldViewModeWhileEditing;
    
    self.m_textPasswd.text = NSLocalizedString(WIFI_PASSWORD_TIP_TXT, nil);
    self.m_textPasswd.delegate = self;
    self.m_textPasswd.clearButtonMode = UITextFieldViewModeWhileEditing;
    

    CFArrayRef __nullable interface = CNCopySupportedInterfaces();
    for (NSString* interf in (__bridge id)interface) {
        info = (__bridge id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interf));
        if (info && [info count]) {
            break;
        }
    }
    

    NSString* sID = @"SSID:";
    if (nil == info[@"SSID"] || 0 == [info[@"SSID"] length]) {
        return;
    }
    self.m_lblSsid.text = [sID stringByAppendingString:info[@"SSID"]];

    m_configWifi = [[LCOpenSDK_ConfigWIfi alloc] init];
}

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

- (void)onBack:(id)sender
{
    [m_configWifi configWifiStop];
    if (HasChanged == deviceListState) {
        [(DeviceViewController*)devView getDevList];
    }
    [self dismissViewControllerAnimated:YES completion:nil];
    [self.navigationController popViewControllerAnimated:NO];
}

#pragma mark - 设置变量(En:Set variable)
- (void)setInfo:(LCOpenSDK_Api*)hc token:(NSString*)token devView:(id)view
{
    m_hc = hc;
    m_strAccessToken = [token mutableCopy];
    devView = view;
}

#pragma mark - Wifi配网(En:Wifi distribution network)
- (void)onWifi:(id)sender
{
    [_m_textSerial resignFirstResponder];
    [_m_textDeviceKey resignFirstResponder];
    [_m_textPasswd resignFirstResponder];
    NSLog(@"[%@][%@][%@]", m_deviceId, info[@"SSID"], m_wifiPassword);
    if (nil == m_deviceId || 0 == m_deviceId || [m_deviceId isEqualToString:NSLocalizedString(DEVICE_ID_TIP_TXT, nil)]) {
        self.m_lblHint.text = NSLocalizedString(DEVICE_ID_TIP_TXT, nil);
        return;
    }
    
    /**
     Ch:配网前检查设备是否被绑定过,以免配好网后才知道设备被绑定过.
     En:Check whether the device is bound before network configuration, so as not to know that the device is bound after the network is configured.
     */
    RestApiService* restApiService = [RestApiService shareMyInstance];
    __block NSString* errMsg;
    
    self.m_lblHint.text = @"check device bind or not...";
    [restApiService checkDeviceBindOrNot:m_deviceId Msg:&errMsg];
    if (![errMsg isEqualToString:[MSG_DEVICE_NOT_BIND mutableCopy]]) {
        if([NSLocalizedString(LANGUAGE_TXT, nil) isEqualToString:@"zh"]){
            self.m_lblHint.text = errMsg;
        }
        else{
            self.m_lblHint.text = @"device has been bound by others";
        }
        return;
    }
    
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(INSTRUCTION_TIP_TXT, nil) message:nil preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* confirmAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction* _Nonnull action) {
        self.m_lblHint.text = @"smartconfig...";
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSInteger iRet = [m_configWifi configWifiStart:m_deviceId
                                                      ssid:info[@"SSID"]
                                                  password:m_wifiPassword
                                                    secure:m_deviceKey ?: @""
                                                 voiceFreq:11000];
            if (iRet < 0) {
                NSLog(@"smartconfig failed\n");
                return;
            }
            
            __block NSString *theMac = nil;
            __block NSString *theIp = nil;
            __block int thePort = 0;
            __block int theInitStatus = 0;
            LCOpenSDK_DeviceInit *deviceInit = [[LCOpenSDK_DeviceInit alloc] init];
            [deviceInit searchDeviceInitInfo:m_deviceId timeOut:60000*2 success:^(LCOPENSDK_DEVICE_INIT_INFO info) {
                theMac = [NSString stringWithUTF8String:info.mac];
                theIp = [NSString stringWithUTF8String:info.ip];
                thePort = info.port;
                theInitStatus = info.status;
            }];
            [m_configWifi configWifiStop];
            if (!theMac || !theIp) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    self.m_lblHint.text = @"smartconfig timeout!";
                });
            }
            else
            {
                dispatch_async(dispatch_get_main_queue(), ^{
                    self.m_lblHint.text = @"smartconfig succeed!";
                });
                [self initDevice:10000];
            }
        });
    }];
    [alert addAction:confirmAction];
    [self presentViewController:alert animated:YES completion:nil];
}

#pragma mark - 设备绑定(En:Device binding)
- (void)restApiBind:(NSString*)devId deviceKey:(NSString*)devKey
{
    RestApiService* restApiService = [RestApiService shareMyInstance];
    __block NSString* errMsg;
    
    dispatch_async(dispatch_get_main_queue(), ^{
         self.m_lblHint.text = @"check device bind or not...";
    });
   
    [restApiService checkDeviceBindOrNot:devId Msg:&errMsg];
    if (![errMsg isEqualToString:[MSG_DEVICE_NOT_BIND mutableCopy]]) {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.m_lblHint.text = errMsg;
        });
        return;
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        self.m_lblHint.text = @"check device online or not...";
    });
    time_t lBegin, lCur;
    NSInteger lTimeout = 60;
    time(&lBegin);
    lCur = lBegin;
    BOOL bOnline = NO;
    while (lCur >= lBegin && lCur - lBegin < lTimeout) {
        [restApiService checkDeviceOnline:devId Msg:&errMsg];
        if ([errMsg isEqualToString:[MSG_DEVICE_ONLINE mutableCopy]]) {
            bOnline = YES;
            break;
        }
        else if ([errMsg isEqualToString:[MSG_DEVICE_OFFLINE mutableCopy]]) {
            NSString* hintLabelText = [NSLocalizedString(WAIT_TIME_TXT, nil) stringByAppendingFormat:@"%ld", lCur - lBegin];
            hintLabelText = [hintLabelText stringByAppendingString:NSLocalizedString(SECOND_TXT, nil)];
            dispatch_async(dispatch_get_main_queue(), ^{
                self.m_lblHint.text = hintLabelText;
            });
            usleep(5 * 1000 * 1000);
            time(&lCur);
            continue;
        }
        else {
            dispatch_async(dispatch_get_main_queue(), ^{
                self.m_lblHint.text = errMsg;
            });
            return;
        }
    }
    if (NO == bOnline) {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.m_lblHint.text = NSLocalizedString(DEVICE_OFFLINE_TXT, nil);
        });
        return;
    }
    
    // China
    if ([NSLocalizedString(LANGUAGE_TXT, nil) isEqualToString:@"zh"]) {
        NSString* devAbility = nil;
        [restApiService unBindDeviceInfo:devId Ability:&devAbility Msg:&errMsg];
        if (![errMsg isEqualToString:[MSG_SUCCESS mutableCopy]]) {
            self.m_lblHint.text = errMsg;
            return;
        }
        
        if ([devAbility rangeOfString:@"Auth"].location != NSNotFound) {
            [restApiService bindDevice:devId Code:devKey Msg:&errMsg];
            if (![errMsg isEqualToString:[MSG_SUCCESS mutableCopy]]) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    self.m_lblHint.text = errMsg;
                });
                return;
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                self.m_lblHint.text = NSLocalizedString(BIND_SUCCESS_TXT, nil);
            });
            deviceListState = HasChanged;
        }
        else if ([devAbility rangeOfString:@"RegCode"].location != NSNotFound)
        {
            UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Please Input Device Safe Code" message:nil preferredStyle:UIAlertControllerStyleAlert];
            [alert addTextFieldWithConfigurationHandler:nil];
            UIAlertAction* confirmAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction* _Nonnull action) {
                NSString* devCode = alert.textFields[0].text;
                [restApiService bindDevice:devId Code:devCode Msg:&errMsg];
                if (![errMsg isEqualToString:[MSG_SUCCESS mutableCopy]]) {
                    dispatch_async(dispatch_get_main_queue(), ^{
                        self.m_lblHint.text = errMsg;
                    });
                    return;
                }
                dispatch_async(dispatch_get_main_queue(), ^{
                    self.m_lblHint.text = NSLocalizedString(BIND_SUCCESS_TXT, nil);
                });
                
                deviceListState = HasChanged;
            }];
            UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"NO" style:UIAlertActionStyleDefault handler:nil];
            [alert addAction:confirmAction];
            [alert addAction:cancelAction];
            [self presentViewController:alert animated:YES completion:nil];
        }
        else
        {
            [restApiService bindDevice:devId Code:@"" Msg:&errMsg];
            if (![errMsg isEqualToString:[MSG_SUCCESS mutableCopy]]) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    self.m_lblHint.text = errMsg;
                });
            
                return;
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                self.m_lblHint.text = NSLocalizedString(BIND_SUCCESS_TXT, nil);
            });
           
            deviceListState = HasChanged;
        }
    }
    // overseas
    else
    {
        [restApiService bindDevice:devId Code:devKey Msg:&errMsg];
        if (![errMsg isEqualToString:[MSG_SUCCESS mutableCopy]]) {
            dispatch_async(dispatch_get_main_queue(), ^{
                self.m_lblHint.text = errMsg;
            });
        
            return;
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            self.m_lblHint.text = NSLocalizedString(BIND_SUCCESS_TXT, nil);
        });
        deviceListState = HasChanged;
    }
}
#pragma mark - 设备初始化(En:Device initialization)
- (void)initDevice:(int)timeout
{

    NSLog(@"LCOpen_SoftAP deviceID[%s]\n", [m_deviceId UTF8String]);
    if (!m_deviceId || 0 == m_deviceId.length || [m_deviceId isEqualToString:NSLocalizedString(DEVICE_ID_TIP_TXT, nil)]) {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.m_lblHint.text = NSLocalizedString(DEVICE_ID_TIP_TXT, nil);
        });
        return;
    }
    
    dispatch_async(dispatch_get_main_queue(), ^{
        self.m_lblHint.text = @"Searching device...";
    });
    __block NSString *theMac = nil;
    __block NSString *theIp = nil;
    __block int thePort = 0;
    __block int theInitStatus = 0;
    __block LCOpenSDK_DeviceInit *deviceInit = [[LCOpenSDK_DeviceInit alloc] init];
    [deviceInit searchDeviceInitInfo:m_deviceId timeOut:timeout success:^(LCOPENSDK_DEVICE_INIT_INFO info) {
        theMac = [NSString stringWithUTF8String:info.mac];
        theIp = [NSString stringWithUTF8String:info.ip];
        thePort = info.port;
        theInitStatus = info.status;
    }];
    if (!theMac || !theIp) {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.m_lblHint.text = @"Search device init info failed!";
        });
        return;
    }
    
    /**
     Ch:以下为支持SC码设备
     En:The following are devices that support SC code.
     */
    NSString* scCode = m_deviceKey;
    NSLog(@"LCOpen_SoftAP scCode[%s]\n", [scCode UTF8String]);
    if(scCode.length == 8)
    {
        [self restApiBind:m_deviceId deviceKey:scCode];
        return;
    }
    
    if (0 == theInitStatus && [NSLocalizedString(LANGUAGE_TXT, nil) isEqualToString:@"zh"]) {
        /**
         Ch:基于“不支持设备初始化的设备肯定也不支持Auth能力集”的断定
         En:Based on the conclusion that "devices that do not support device initialization certainly do not support the Auth capability set"
         */
        dispatch_async(dispatch_get_main_queue(), ^{
            self.m_lblHint.text = @"Bind device...";
            [self restApiBind:m_deviceId deviceKey:nil];
        });
    } else {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSString* alertControllerTitle = nil;
            if (1 == theInitStatus) {
                alertControllerTitle = @"Please Input Device Init Key";
            }
            else {
                alertControllerTitle = @"Please Input Device Key";
            }
            UIAlertController* alert = [UIAlertController alertControllerWithTitle:alertControllerTitle message:nil preferredStyle:UIAlertControllerStyleAlert];
            [alert addTextFieldWithConfigurationHandler:nil];
            UIAlertAction* confirmAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction* _Nonnull action) {
                NSString* deviceKey = alert.textFields[0].text;
                
                if (1 == theInitStatus) {
                    self.m_lblHint.text = @"try multicast init device...";
                    int ret = [deviceInit initDevice:theMac password:deviceKey];
                    if (-2 == ret) {
                        self.m_lblHint.text = @"try unicast init device...";
                        
                        /**
                         Ch:为了解决可能出现的第二次才回调正确IP, 单播初始化前再做一次设备搜索
                         En:In order to solve the possible second time to call back the correct IP, do a device search before unicast initialization.
                         */
                        theMac = nil;
                        theIp = nil;
                        thePort = 0;
                        theInitStatus = 0;
                        [deviceInit searchDeviceInitInfo:m_deviceId timeOut:timeout success:^(LCOPENSDK_DEVICE_INIT_INFO info) {
                            theMac = [NSString stringWithUTF8String:info.mac];
                            theIp = [NSString stringWithUTF8String:info.ip];
                            thePort = info.port;
                            theInitStatus = info.status;
                        }];
                        if (!theMac || !theIp) {
                            dispatch_async(dispatch_get_main_queue(), ^{
                                self.m_lblHint.text = @"Search device init info failed!";
                            });
                            return;
                        }
                        
                        int ret = [deviceInit initDevice:theMac password:deviceKey ip:theIp];
                        if (-2 == ret) {
                            self.m_lblHint.text = @"Init device failed!";
                            return;
                        }
                        else
                        {
                            self.m_lblHint.text = @"unicast init device succeed!";
                        }
                    }
                    else
                    {
                        self.m_lblHint.text = @"multicast init device succeed!";
                    }
                }
                else if ((0 == theInitStatus || 2 == theInitStatus) && [NSLocalizedString(LANGUAGE_TXT, nil) isEqualToString:@"en"]) {
                    if (!deviceKey || 0 == deviceKey.length || [deviceKey isEqualToString:NSLocalizedString(DEVICE_KEY_TIP_TXT, nil)]) {
                        self.m_lblHint.text = NSLocalizedString(DEVICE_KEY_TIP_TXT, nil);
                        return;
                    }
                    self.m_lblHint.text = @"Check device password...";
                    int ret = [deviceInit checkPwdValidity:m_deviceId ip:theIp port:thePort password:deviceKey];
                    if (0 != ret) {
                        self.m_lblHint.text = @"Check device password failed!";
                        return;
                    }
                    else
                    {
                        self.m_lblHint.text = @"Check device password succeed!";
                    }
                }
                
                [self restApiBind:m_deviceId deviceKey:deviceKey];
            }];
            UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"NO" style:UIAlertActionStyleDefault handler:nil];
            [alert addAction:confirmAction];
            [alert addAction:cancelAction];
            [self presentViewController:alert animated:YES completion:nil];
        });
    }
}
#pragma mark - 有线配网(En:Wired distribution network)
- (void)onWired:(id)sender
{
    [_m_textSerial resignFirstResponder];
    [_m_textDeviceKey resignFirstResponder];
    [_m_textPasswd resignFirstResponder];
    /**
    Ch:配网前检查设备是否被绑定过,以免配好网后才知道设备被绑定过.
    En:Check whether the device is bound before network configuration, so as not to know that the device is bound after the network is configured.
    */
    NSLog(@"LCOpen_SoftAP deviceID[%s]\n", [m_deviceId UTF8String]);
    if (!m_deviceId || 0 == m_deviceId.length || [m_deviceId isEqualToString:NSLocalizedString(DEVICE_ID_TIP_TXT, nil)]) {
        self.m_lblHint.text = NSLocalizedString(DEVICE_ID_TIP_TXT, nil);
        return;
    }
    RestApiService* restApiService = [RestApiService shareMyInstance];
    __block NSString* errMsg;
    
    self.m_lblHint.text = @"check device bind or not...";
    [restApiService checkDeviceBindOrNot:m_deviceId Msg:&errMsg];
    if (![errMsg isEqualToString:[MSG_DEVICE_NOT_BIND mutableCopy]]) {
        self.m_lblHint.text = errMsg;
        return;
    }
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [self initDevice:10000];
    });
}

#pragma mark - 获取当前连接的WIFI名称(En:Get the name of the currently connected WIFI)
- (NSString*) getCurrentWifiName
{
    id info = nil;
    /**
     Ch:获取所有的支持接口
     En:Get all supported interfaces.
     */
    NSArray* ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
    for(NSString* ifnam in ifs)
    {
        /**
         Ch:找到当前网络信息
         En:Find current network information.
         */
        NSLog(@"sqtest1 ifnam %s", [ifnam UTF8String]);
        info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
        /**
         Ch:通过SSID来获取当前网络名
         En:Get the current network name by SSID.
         */
        NSString* str = info[@"SSID"];
        if(str){
            return str;
        }
    }
    return @"";
}

#pragma mark - 软AP配网(En:Soft AP distribution network)
- (IBAction)onSoftAP:(id)sender
{
    [_m_textSerial resignFirstResponder];
    [_m_textDeviceKey resignFirstResponder];
    [_m_textPasswd resignFirstResponder];
    NSLog(@"sqtest1 [%@][%@][%@]", m_deviceId, info[@"SSID"], m_wifiPassword);
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    if(!m_softAPView){
        /* 获取storyboard */
        UIStoryboard* currentBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        /* 获取view */
        m_softAPView = [currentBoard instantiateViewControllerWithIdentifier:@"SoftAPConnectView"];
    }
    
    NSLog(@"sqtest2 [%@][%@][%@]", m_deviceId, info[@"SSID"], m_wifiPassword);
    m_softAPView.m_wifiName = info[@"SSID"];
    m_softAPView.m_wifiPwd = m_wifiPassword;
    m_softAPView.m_deviceId = m_deviceId;
    m_softAPView.m_deviceKey = m_deviceKey;

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.navigationController pushViewController:m_softAPView animated:NO];
    });
    });
}

#pragma mark - 配网回调通知(En:Distribution network callback notification)
- (void)notify:(NSInteger)event
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [m_configWifi configWifiStop];
        usleep(100000);
        [self initDevice:60000];
    });
}

- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
    if ((textField == _m_textSerial && [_m_textSerial.text isEqualToString:NSLocalizedString(DEVICE_ID_TIP_TXT, nil)]) || (textField == _m_textPasswd && [_m_textPasswd.text isEqualToString:NSLocalizedString(WIFI_PASSWORD_TIP_TXT, nil)])) {
        textField.text = @"";
    }
    textField.textColor = [UIColor blackColor];
    CGFloat offset = self.view.frame.size.height - (textField.frame.origin.y + textField.frame.size.height + 216 + 50);
    if (offset <= 0) {
        [UIView animateWithDuration:0.1 animations:^{
            CGRect frame = self.view.frame;
            frame.origin.y = offset;
            self.view.frame = frame;
        }];
    }
    return YES;
}

- (BOOL)textFieldShouldEndEditing:(UITextField*)textField
{
    if (textField == self.m_textSerial) {
           m_deviceId = textField.text;
    }
    else if (textField == self.m_textDeviceKey) {
           m_deviceKey = textField.text;
    }
    else if (textField == self.m_textPasswd) {
           m_wifiPassword = textField.text;
    }
    [UIView animateWithDuration:0.1 animations:^{
        CGRect rect = self.view.frame;
        rect.origin.y = 0;
        self.view.frame = rect;
    }];
    return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField*)textField
{
    [textField resignFirstResponder];

    return YES;
}

@end