//
//  LoginViewController.m
//  Lighting
//
//  Created by 曹云霄 on 16/4/27.
//  Copyright © 2016年 上海勾芒科技有限公司. All rights reserved.
//

#import "LoginViewController.h"
#import "CustomTabbarController.h"
#import "AppDelegate.h"
#import "authenticateView.h"
#import "SceneLibraryViewController.h"
#import "ProductLibraryViewController.h"
#import "AllCustomerViewController.h"
#import "CustomerOrderViewController.h"
#import "LearningCenterMainViewController.h"
#import "JPUSHService.h"


@interface LoginViewController ()<RightVCselectedDelegate>

@property (nonatomic,strong) MMDrawerController *drawerController;
@property (nonatomic,strong) CustomTabbarController *customtabbar;

/**
 *  验证身份View
 */
@property (nonatomic,strong) authenticateView *identityView;

/**
 *  重置密码View
 */
@property (nonatomic,strong) authenticateView *resetPasswordView;

/**
 *  定时器
 */
@property (nonatomic,strong) NSTimer *sendTimer;

/**
 *  用户名
 */
@property (nonatomic,copy) NSString *userNameString;
/**
 *  密码
 */
@property (nonatomic,copy) NSString *passWordString;

/**
 * companyName
 */
@property (weak, nonatomic) IBOutlet UIImageView *companyName;

/**
 *  背景大图
 */
@property (weak, nonatomic) IBOutlet UIImageView *backImageView;

/**
 *  版本号
 */
@property (weak, nonatomic) IBOutlet UILabel *versionlabel;



@end

@implementation LoginViewController


- (CustomTabbarController *)customtabbar
{
    if (_customtabbar == nil) {
        
        _customtabbar = [[CustomTabbarController alloc]init];
    }
    return _customtabbar;
}

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

#pragma mark - 布局
- (void)uiConfigAction
{
    self.loginButton.layer.masksToBounds = YES;
    self.loginButton.layer.cornerRadius = kCornerRadius;
    self.userNameBackview.layer.masksToBounds = YES;
    self.userNameBackview.layer.cornerRadius = kCornerRadius;
    self.passWordBackview.layer.masksToBounds = YES;
    self.passWordBackview.layer.cornerRadius = kCornerRadius;
    self.userNameLoginView.layer.masksToBounds = YES;
    self.userNameLoginView.layer.cornerRadius = 10;
    self.forgotPasswordButton.titleLabel.font = [UIFont boldSystemFontOfSize:16];
    
    //加载本地的用户名密码
    self.userName.text = [UserDefault objectForKey:SAVEACCOUNT];
    self.passWord.text = [UserDefault objectForKey:SAVEPASSWORD];
    //版本更新
    [Notification addObserver:self selector:@selector(detectionUpdateVersion) name:UPLOADVERSION object:nil];
    self.versionlabel.text = [self getAppVersion];
    [self detectionUpdateVersion];
}


#pragma mark -登陆
- (IBAction)LoginButtonClick:(UIButton *)sender {

    if ([[self class] isBlankString:self.userName.text]) {
        [XBLoadingView showHUDViewWithText:@"用户名不能为空"];return;
    }else if ([[self class] isBlankString:self.passWord.text])
    {
        [XBLoadingView showHUDViewWithText:@"密码不能为空"];return;
    }
    [self judgeUserNameAndPassword];
}

#pragma mark -设置根视图控制器
- (void)setTheRootViewController
{
    RightViewController *rightVC = [RightViewController viewControllerWithStoryBoardType:STORYBOARD_TYPE_MAIN];
    rightVC.delegate = self;
    self.drawerController = [[MMDrawerController alloc]initWithCenterViewController:self.customtabbar rightDrawerViewController:rightVC];
    [self.drawerController setMaximumRightDrawerWidth:RightWidth];
    [self.drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];
    [self.drawerController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];
    SHARED_APPDELEGATE.mmdrawer = self.drawerController;
    [self restoreRootViewController:self.drawerController];
    SHARED_APPDELEGATE.Mytabbar = self.customtabbar;
}

#pragma mark -切换rootViewcontroller
- (void)restoreRootViewController:(UIViewController *)rootViewController
{
    typedef void (^Animation)(void);
    UIWindow* window = SHARED_APPDELEGATE.window;
    rootViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    Animation animation = ^{
        BOOL oldState = [UIView areAnimationsEnabled];
        [UIView setAnimationsEnabled:NO];
        window.rootViewController = rootViewController;
        [UIView setAnimationsEnabled:oldState];
    };
    [UIView transitionWithView:window
                      duration:0.5f
                       options:UIViewAnimationOptionTransitionFlipFromTop
                    animations:animation
                    completion:nil];
}


#pragma mark -判断用户名密码是否正确
- (void)judgeUserNameAndPassword
{
    [XBLoadingView showHUDViewWithDefault];
    LoginInfo *login = [[LoginInfo alloc]init];
    login.username = self.userName.text;
    login.password = self.passWord.text;
    login.username = [login.username formatString];
    login.password = [login.password formatString];
    WS(weakSelf);
    [HTTP networkRequestWithURL:SERVERREQUESTURL(LOGIN)  withRequestType:ZERO withParameter:login withReturnValueBlock:^(id returnValue) {
        [XBLoadingView hideHUDViewWithDefault];
        if (RESULT(returnValue)) {
            LoginResult *result = [[LoginResult alloc]initWithDictionary:RESPONSE(returnValue) error:nil];
            [Shoppersmanager manager].shoppers = result;
            [Shoppersmanager manager].userNameString = weakSelf.userName.text;
            [Shoppersmanager manager].passWordString = weakSelf.passWord.text;
            [SHARED_APPDELEGATE setUpJPushAlias];
            [[weakSelf class] saveAccountAndPassWord:weakSelf.userName.text AndPassword:weakSelf.passWord.text];
            if (![Shoppersmanager manager].shoppers.isHasStoreAddress) {
                [weakSelf setTheRootViewController];return;
            }
            [weakSelf getStoreAddress:^{
                [weakSelf setTheRootViewController];
            }];
        }else
        {
            [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
        }
    }withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}


#pragma mark -RightVCselectedDelegate 方法
- (void)selectedControllerWithIndex:(NSString *)Name
{
    SHARED_APPDELEGATE.lineView.hidden = YES;
    NSInteger selectedIndex = 7;
    if ([Name isEqualToString:@"体验中心"]) {
        [Notification postNotificationName:OPENFOLLOWHEARTVC object:nil];
        return;
        
    }else if ([Name isEqualToString:@"体验中心3D"])
    {
        [Notification postNotificationName:OPENFOLLOWHEART3DVC object:nil];
        return;
    }
    else if ([Name isEqualToString:@"场景库"])
    {
        selectedIndex +=1;
        SceneLibraryViewController *sceneVC = [SHARED_APPDELEGATE.allControllerArray objectAtIndex_opple:selectedIndex];
        sceneVC.conditionModel.styleEquals = nil;
        sceneVC.conditionModel.spaceEquals = nil;
        [sceneVC.styleButton setTitle:@"风格" forState:UIControlStateNormal];
        [sceneVC.spaceButton setTitle:@"空间" forState:UIControlStateNormal];
        [sceneVC.collectionView.mj_header beginRefreshing];
       
    }else if ([Name isEqualToString:@"产品库"])
    {
        selectedIndex +=2;
        ProductLibraryViewController *productVC = [SHARED_APPDELEGATE.allControllerArray objectAtIndex_opple:selectedIndex];
        //默认加载全部数据
        productVC.barcode = nil;
        productVC.selectedCode = nil;
        productVC.condtionModel = nil;
        [productVC.collectionView.mj_header beginRefreshing];
    }else if ([Name isEqualToString:@"所有客户"])
    {
        selectedIndex +=3;
        AllCustomerViewController *AllcustomerVC = [SHARED_APPDELEGATE.allControllerArray objectAtIndex_opple:selectedIndex];
        AllcustomerVC.searchTextfield.text = nil;
        AllcustomerVC.conditionModel = nil;
        [AllcustomerVC.tableView.mj_header beginRefreshing];
    }else if ([Name isEqualToString:@"客户订单"])
    {
        selectedIndex +=4;
        CustomerOrderViewController *customerVC = [SHARED_APPDELEGATE.allControllerArray objectAtIndex_opple:selectedIndex];
        customerVC.searchCustomerOrder.text = nil;
        [customerVC.styleButton setTitle:@"全部订单" forState:UIControlStateNormal];
        customerVC.model.consumerNameOrMobileEquals = nil;
        customerVC.model.orderStateEquals = nil;
        [customerVC.tableView.mj_header beginRefreshing];
    }else if ([Name isEqualToString:@"学习中心"])
    {
        selectedIndex +=5;
    }else if ([Name isEqualToString:@"关于"])
    {
        selectedIndex +=6;
    }
   self.customtabbar.selectedIndex = selectedIndex;
}


#pragma mark -忘记密码
- (IBAction)ForgotpasswordButtonClick:(UIButton *)sender {
    
    self.identityView = [[[NSBundle mainBundle] loadNibNamed:@"authenticateView" owner:self options:nil]firstObject];
    //判断登陆界面是否已经输入了用户名，如果有则直接引用，否则报错
    if (![[self class] isBlankString:self.userName.text]) {
        self.identityView.userName.text = self.userName.text;
    } else {
        [XBLoadingView showHUDViewWithText:@"请填写您的用户名"];
        self.passWord.text = @"";
        return;
    }
    self.identityView.layer.masksToBounds = YES;
    self.identityView.layer.cornerRadius = 10;
    [self.identityView.backLoginButton addTarget:self action:@selector(BackloginButtonClick) forControlEvents:UIControlEventTouchUpInside];
    [self.identityView.nextButton addTarget:self action:@selector(NextButtonClick) forControlEvents:UIControlEventTouchUpInside];
    [self.identityView.SendButton addTarget:self action:@selector(SendButtonClick) forControlEvents:UIControlEventTouchUpInside];
    self.identityView.alpha = 0;
    self.identityView.frame = self.userNameLoginView.frame;
    [self.view addSubview:self.identityView];
    [UIView animateWithDuration:0.2 animations:^{
        self.identityView.alpha = 1;
    }];
}

#pragma mark -发送验证码
- (void)SendButtonClick
{
    WS(weakSelf);
    NSString *inputPhoneNumber = self.identityView.bindingPhoneNumber.text;
    if ([[self class] isBlankString:inputPhoneNumber]) {
        [XBLoadingView showHUDViewWithText:@"手机号不能为空"];
        return;
    }
    if (![inputPhoneNumber isTelephone]) {
        [XBLoadingView showHUDViewWithText:@"手机号码格式不正确"];
        return;
    }
    [XBLoadingView showHUDViewWithDefault];
    NSString *urlString = [NSString stringWithFormat:SERVERREQUESTURL(SENDSMS),inputPhoneNumber,self.identityView.userName.text];
    [HTTP networkWithDictionaryRequestWithURL:[self returnUrlString:urlString]  withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
        [XBLoadingView hideHUDViewWithDefault];
        if (RESULT(returnValue)) {
            [XBLoadingView showHUDViewWithText:@"发送验证码成功"];
            [weakSelf.identityView.SendButton setTitle:@"60" forState:UIControlStateNormal];
            weakSelf.identityView.SendButton.enabled = NO;
            weakSelf.sendTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(SendbuttonChangetitle) userInfo:nil repeats:YES];
        }else
        {
            [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
        }
    }withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}


#pragma mark -倒计时
- (void)SendbuttonChangetitle
{
    NSInteger number = [self.identityView.SendButton.currentTitle integerValue];
    if (number <= 0) {
        [self.identityView.SendButton setTitle:@"发送" forState:UIControlStateNormal];
        self.identityView.SendButton.enabled = YES;
        [self.sendTimer invalidate];
        return;
    }
    number --;
    [self.identityView.SendButton setTitle:[NSString stringWithFormat:@"%ld",number] forState:UIControlStateNormal];
    
}


#pragma mark -返回登陆界面
- (void)BackloginButtonClick
{
    [UIView animateWithDuration:0.2 animations:^{
        self.identityView.alpha = 0;
    }completion:^(BOOL finished) {
        [self.identityView removeFromSuperview];
    }];
}


#pragma mark -下一步（重置密码界面）
- (void)NextButtonClick
{
    // 验证码必须填写
    if ([[self class] isBlankString:self.identityView.verificationCode.text]) {
        [XBLoadingView showHUDViewWithText:@"验证码不能为空"];
        return;
    } else {
        [self.sendTimer invalidate];
        self.resetPasswordView = [[[NSBundle mainBundle] loadNibNamed:@"authenticateView" owner:self options:nil]lastObject];
        self.resetPasswordView.layer.masksToBounds = YES;
        self.resetPasswordView.layer.cornerRadius = 10;
        self.resetPasswordView.frame = self.userNameLoginView.frame;
        [self.resetPasswordView.backValidationView addTarget:self action:@selector(backButonClick) forControlEvents:UIControlEventTouchUpInside];
        [self.resetPasswordView.resetPasswordNextButton addTarget:self action:@selector(ChangPassWordRequest) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:self.resetPasswordView];
        self.resetPasswordView.alpha = 0;
        [UIView animateWithDuration:0.2 animations:^{
            self.resetPasswordView.alpha = 1;
        }];
    }
}


#pragma mark -修改密码
- (void)ChangPassWordRequest
{
    if ([[self class] isBlankString:self.resetPasswordView.newpass.text]) {
        [XBLoadingView showHUDViewWithText:@"新密码为空"];return;
    }
    if ([[self class] isBlankString:self.resetPasswordView.confirmNewpass.text]){
        [XBLoadingView showHUDViewWithText:@"确认密码为空"];return;
    }
    if (![self.resetPasswordView.newpass.text isEqualToString:self.resetPasswordView.confirmNewpass.text]) {
        [XBLoadingView showHUDViewWithText:@"两次密码不相同"];return;
    }
    [XBLoadingView showHUDViewWithDefault];
    //重置密码接口
    ResetPasswordRequest *passwrod = [[ResetPasswordRequest alloc]init];
    passwrod.fnewPassword = self.resetPasswordView.newpass.text;
    passwrod.username = self.userName.text;
    passwrod.smsCode = self.identityView.verificationCode.text;
    WS(weakSelf);
    [HTTP networkRequestWithURL:SERVERREQUESTURL(RESETPASSWORD)  withRequestType:ZERO withParameter:passwrod withReturnValueBlock:^(id returnValue) {
        
        [XBLoadingView hideHUDViewWithDefault];
        if (RESULT(returnValue)) {
            
            [XBLoadingView showHUDViewWithText:@"重置密码成功"];
            weakSelf.passWord.text = weakSelf.resetPasswordView.newpass.text;
            [weakSelf judgeUserNameAndPassword];
        }else
        {
           [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
        }
    } withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}



#pragma mark -返回验证信息界面
- (void)backButonClick
{
    [UIView animateWithDuration:0.2 animations:^{
        self.resetPasswordView.alpha = 0;
    } completion:^(BOOL finished) {
        [self.resetPasswordView removeFromSuperview];
    }];
    // 重置发送按钮
    [self.identityView.SendButton setTitle:@"发送" forState:UIControlStateNormal];
    self.identityView.SendButton.enabled = YES;
    [self.sendTimer invalidate];
    // 清空验证码
    self.identityView.verificationCode.text = @"";
}

#pragma mark - 检测更新
- (void)detectionUpdateVersion
{
    [XBLoadingView hideHUDViewWithDefault];
    NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    //获取服务端版本大小
    WS(weakSelf);
    NSString *string = [NSString stringWithFormat:@"/employee/getUpgrade?apptype=ios&version=%@",version];
    [HTTP networkWithDictionaryRequestWithURL:SERVERREQUESTURL(string)  withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
        if (RESULT(returnValue)) {
            NSDictionary *dict = RESPONSE(returnValue);
            if (!dict || [dict isKindOfClass:[NSNull class]]) {
                return;
            }
            UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:[NSString stringWithFormat:@"发现新版本%@,快去更新吧!",dict[@"version"]] preferredStyle:UIAlertControllerStyleAlert];
            [alertVC addAction:[UIAlertAction actionWithTitle:@"我知道了" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:dict[@"url"]]];
            }]];
            //是否强制更新
            if (![dict[@"forceupdate"] isEqualToString:@"1"]) {
                [alertVC addAction:[UIAlertAction actionWithTitle:@"以后再说" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                    [weakSelf dismissViewControllerAnimated:YES completion:nil];
                }]];
            }
            [weakSelf presentViewController:alertVC animated:YES completion:nil];
        }
    } withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}

@end
