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

#import "SettlementViewController.h"
#import "PayViewController.h"
#import "PromotionalDeductionModel.h"
#import "PromotionalGoodsModel.h"
#import "PromotionLuckyDrawModel.h"
#import "PromotionWeChatCardModel.h"
#import "PromotionJDECardModel.h"
#import "PromotionalReadPacketModel.h"

@interface SettlementViewController ()<ReturnTableviewcellIndexpathdelegate,UITextFieldDelegate>

/**
 *  支付宝二维码
 */
@property (nonatomic,copy) NSString *zhiFubaoLabe;

/**
 *  微信二维码
 */
@property (nonatomic,copy) NSString *weiXinLabe;

/**
 *  二维码界面
 */
@property (nonatomic,strong) PayViewController *payController;

/**
 总金额来源
 */
@property (nonatomic,copy) NSString *totalAmountSource;


@end

@implementation SettlementViewController


#pragma mark -初始化二维码显示
- (PayViewController *)payController
{
    if (!_payController) {
        _payController = [[PayViewController alloc]init];
    }
    return _payController;
}

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


#pragma mark -布局
- (void)uiConfigAction
{
    self.goodsAllNumberBackvie.layer.masksToBounds = YES;
    self.goodsAllNumberBackvie.layer.cornerRadius = kCornerRadius;
    self.goodsAllpriceBackView.layer.masksToBounds = YES;
    self.goodsAllpriceBackView.layer.cornerRadius = kCornerRadius;
    self.payTypeButton.layer.masksToBounds = YES;
    self.payTypeButton.layer.cornerRadius = kCornerRadius;
    self.WeixiPayButton.layer.masksToBounds = YES;
    self.WeixiPayButton.layer.cornerRadius = kCornerRadius;
    self.payTreasureButton.layer.masksToBounds = YES;
    self.payTreasureButton.layer.cornerRadius = kCornerRadius;
    self.ISinvoiceButton.layer.masksToBounds = YES;
    self.ISinvoiceButton.layer.cornerRadius = kCornerRadius;
    self.invoiceType.layer.masksToBounds = YES;
    self.invoiceType.layer.cornerRadius = kCornerRadius;
    self.invoiceBackView.layer.masksToBounds = YES;
    self.invoiceBackView.layer.cornerRadius = kCornerRadius;
    self.cancelButton.layer.masksToBounds = YES;
    self.cancelButton.layer.cornerRadius = kCornerRadius;
    self.sureButton.layer.masksToBounds = YES;
    self.sureButton.layer.cornerRadius = kCornerRadius;
    self.myScrollView.contentSize = CGSizeMake(0, self.view.frame.size.height);
    self.invoiceHeader.delegate = self;
}


#pragma mark -支付总金额,商品总数量
- (void)calculateGoodsTotalAmountAndTotalNumber
{
    NSInteger goodsAllNumber = 0;//总数量
    for (TOOrderdetailEntity *model in _goodsArray) {
        goodsAllNumber += [model.goodsNum integerValue];
    }
    CGFloat allPrice = 0;//实际支付金额
    NSDictionary *deductionPrice = nil;//抵扣金额
    NSDictionary *weChatPrice = nil;//微信卡劵
    NSDictionary *drawPrice = nil;//转盘抽奖
    for (TOOrderdetailEntity *model in _goodsArray) {
        allPrice += [model.goodsPrice floatValue]*[model.goodsNum floatValue];
    }
    //促销列表
    for (JSONModel *model in self.consumerPromotionalArray) {
            //微信卡劵
        if ([model isMemberOfClass:[PromotionWeChatCardModel class]]) {
            PromotionWeChatCardModel *weChatModel = (PromotionWeChatCardModel *)model;
            weChatPrice = @{@"price":[NSString stringWithFormat:@"%ld",self.weChatModel.wxcardDenomation],@"priority":@(weChatModel.priority)};
            
        }else if ([model isMemberOfClass:[PromotionalDeductionModel class]]) {
            //抵扣
            PromotionalDeductionModel *deductionModel = (PromotionalDeductionModel *)model;
            deductionPrice = @{@"price":[NSString stringWithFormat:@"%ld",deductionModel.total],@"priority":@(deductionModel.priority)};
            
        }else if ([model isMemberOfClass:[PromotionLuckyDrawModel class]]) {
            //抽奖
            PromotionLuckyDrawModel *drawModel = (PromotionLuckyDrawModel *)model;
            drawPrice = @{@"price":[NSString stringWithFormat:@"%@",self.resultModel.number],@"priority":@(drawModel.priority)};
            
        }else if ([model isMemberOfClass:[PromotionalGoodsModel class]]) {
            //送商品
            //PromotionalGoodsModel *goodsModel = (PromotionalGoodsModel *)model;
        }
    }
    CGFloat goodsAllPrice = [self promotionSorting:deductionPrice andWeChatPrice:weChatPrice andDrawPrice:drawPrice andAllPrice:allPrice];
    self.goodsAllNumber.text = [NSString stringWithFormat:@"%ld",goodsAllNumber];
    self.goodsAllPrice.text = [NSString stringWithFormat:@"¥%.2f",goodsAllPrice];
}

#pragma mark - 通过优先级排列促销项
- (CGFloat)promotionSorting:(NSDictionary *)deductionPrice andWeChatPrice:(NSDictionary *)weChatPrice andDrawPrice:(NSDictionary *)drawPrice andAllPrice:(CGFloat)allPrice
{
    NSMutableArray *array = [NSMutableArray array];
    if (deductionPrice) {
        [array addObject:deductionPrice];
    }
    if (weChatPrice) {
        [array addObject:weChatPrice];
    }
    if (drawPrice) {
        [array addObject:drawPrice];
    }
    //安装权限降序排列
    NSArray *chooseArray = [array sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) {
        if (obj1[@"priority"] < obj2[@"priority"]) {
            return NSOrderedDescending;
        }
        if (obj1[@"priority"] < obj2[@"priority"]) {
            return NSOrderedAscending;
        }
        return NSOrderedSame;
    }];
    //计算促销后的价格
    CGFloat newPrice = allPrice;
    NSMutableString *priceString = [NSMutableString stringWithFormat:@"原价 %.2f元",allPrice];
    for (NSDictionary *dict in chooseArray) {
        if ([dict isEqual:deductionPrice]) {
            CGFloat deduction = [dict[@"price"] floatValue];
            newPrice = newPrice - deduction;
            [priceString appendString:[NSString stringWithFormat:@" - 抵扣促销 %.2f元",deduction]];
            
        }else if ([dict isEqual:weChatPrice]){
            CGFloat weChat = [dict[@"price"] floatValue];
            newPrice = newPrice - weChat;
            [priceString appendString:[NSString stringWithFormat:@" - 微信卡劵 %.2f元",weChat]];
            
        }else if ([dict isEqual:drawPrice] && self.resultModel){
            CGFloat draw = [self.resultModel.number floatValue]/100.0;
            newPrice = newPrice * draw;
            [priceString appendString:[NSString stringWithFormat:@" X 转盘抽奖 %@",self.resultModel.descriptionString]];
        }
    }
    //判断促销是否为空
    if (chooseArray.count) {
        if (newPrice < 0) {
            newPrice = 0;
        }
        [priceString appendString:[NSString stringWithFormat:@" = %.2f元",newPrice]];
    }
    self.totalAmountSource = priceString;
    return newPrice;
}

#pragma mark -获取经营者支付二维码
- (void)getPayQrCode
{
    WS(weakSelf);
    [[NetworkRequestClassManager manager ] networkWithDictionaryRequestWithURL:SERVERREQUESTURL(QRCODE)  withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
        
        if (RESULT(returnValue)) {
            
            NSLog(@"获取二维码成功");
            weakSelf.zhiFubaoLabe = RESPONSE(returnValue)[@"zhifubao"];
            weakSelf.weiXinLabe = RESPONSE(returnValue)[@"weixin"];
            
        }else
        {
            NSLog(@"获取二维码失败");
            [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
        }
        
    } withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.view.superview.layer.cornerRadius = 0;
}


#pragma mark -取消支付
- (IBAction)CancelButtonClick:(UIButton *)sender {
    
    [self dismissViewControllerAnimated:YES completion:nil];
}


#pragma mark -确认支付
- (IBAction)SureButtonClick:(UIButton *)sender {
    
    if ([self.payTypeButton.currentTitle isEqualToString:@"现金、支票、转账、刷卡"] && !self.payTreasureButton.selected && !self.WeixiPayButton.selected) {
        [XBLoadingView showHUDViewWithText:@"请选择一种支付方式"];
        
    }else if ([self.invoiceType.currentTitle isEqualToString:@"公司发票"] && [[self class] isBlankString:self.invoiceHeader.text])
    {
        [XBLoadingView showHUDViewWithText:@"请输入发票抬头"];
    }else
    {
      [self surePayRequest];
    }
}

#pragma amrk -支付方式选择
- (IBAction)payTypeButtonClick:(UIButton *)sender {
    
    NSArray *arr = @[@"现金",@"支票",@"转账",@"刷卡"];
    [self showPopoverViewController:CGSizeMake(100, 200) withdatas:arr showButton:sender selectedIndex:0 getTitle:YES];
}

#pragma mark -微信支付
- (IBAction)WechatButtonClick:(UIButton *)sender {
    
    [self.payController dismissViewControllerAnimated:NO completion:nil];
    if ([self.weiXinLabe isKindOfClass:[NSNull class]]) {
        [XBLoadingView showHUDViewWithText:@"微信支付二维码为空,暂停使用!"];return;
    }
    self.showPayQrCodeImageView.hidden = NO;
    sender.selected = NO;
    [self.showPayQrCodeImageView sd_setImageWithURL:[NSURL URLWithString:self.weiXinLabe] placeholderImage:REPLACEIMAGE];
    self.payTreasureButton.selected = NO;
    [self.payTypeButton setTitle:@"现金、支票、转账、刷卡" forState:UIControlStateNormal];
    [self BringPayController:YES withButton:sender];
}


#pragma mark -支付宝支付
- (IBAction)ZhifubaoPayButtonClick:(UIButton *)sender {
    
    [self.payController dismissViewControllerAnimated:NO completion:nil];
    if ([self.zhiFubaoLabe isKindOfClass:[NSNull class]]) {
        [XBLoadingView showHUDViewWithText:@"支付宝支付二维码为空,暂停使用!"];return;
    }
    self.showPayQrCodeImageView.hidden = NO;
    sender.selected = NO;
    [self.showPayQrCodeImageView sd_setImageWithURL:[NSURL URLWithString:self.zhiFubaoLabe] placeholderImage:REPLACEIMAGE];
    self.WeixiPayButton.selected = NO;
    [self.payTypeButton setTitle:@"现金、支票、转账、刷卡" forState:UIControlStateNormal];
    [self BringPayController:NO withButton:sender];
}


#pragma mark -调出二维码支付框
- (void)BringPayController:(BOOL)weichat withButton:(UIButton *)sender
{
    
    self.payController.preferredContentSize = CGSizeMake(281, 387);
    self.payController.modalPresentationStyle = UIModalPresentationPopover;
    sender.selected = YES;
    UIPopoverPresentationController *pop = self.payController.popoverPresentationController;
    pop.permittedArrowDirections = UIPopoverArrowDirectionLeft;
    pop.sourceView = self.payController.view;
    pop.sourceRect = [self.view convertRect:CGRectMake(sender.mj_x, sender.mj_y-30, sender.mj_w, sender.mj_h) toView:self.view.window];
    self.payController.dealersName.text = weichat?@"微信支付":@"支付宝支付";
    self.payController.dealersName.textColor = weichat?RGB(30, 198, 34,1):RGB(88, 172, 220,1);
    [self.payController.dealersImageView sd_setImageWithURL:[NSURL URLWithString:weichat?self.weiXinLabe:self.zhiFubaoLabe] placeholderImage:REPLACEIMAGE];
    self.payController.payTypeBackimageView.image = weichat?TCImage(@"weixinpay"):TCImage(@"zhifubaopay");
    [self presentViewController:self.payController animated:NO completion:nil];
}


#pragma mark -是否开票
- (IBAction)isinvoiceButtonClick:(UIButton *)sender {
    
    NSArray *arr = @[@"是",@"否"];
    [self showPopoverViewController:CGSizeMake(50, 150) withdatas:arr showButton:sender selectedIndex:1 getTitle:YES];
}


#pragma mark -发票类型
- (IBAction)invoiceTypeButtonClick:(UIButton *)sender {
    
    if ([self.ISinvoiceButton.currentTitle isEqualToString:@"否"]) {
        [XBLoadingView showHUDViewWithText:@"请选择开票"];
        return;
    }
    NSArray *arr = @[@"个人发票",@"公司发票"];
    [self showPopoverViewController:CGSizeMake(100, 150) withdatas:arr showButton:sender selectedIndex:2 getTitle:YES];
}


#pragma mark -弹出popover视图控制器
- (void)showPopoverViewController:(CGSize)size withdatas:(NSArray *)datasArray showButton:(UIButton *)button selectedIndex:(NSInteger)index getTitle:(BOOL )istitle
{
    PopoverViewController *popover = [[PopoverViewController alloc]init];
    popover.datasArray = datasArray;
    popover.delegate = self;
    popover.selectedindex = index;
    popover.isString = YES;
    popover.contentSize = size;
    popover.preferredContentSize = size;
    popover.modalPresentationStyle = UIModalPresentationPopover;
    UIPopoverPresentationController *pop = popover.popoverPresentationController;
    pop.permittedArrowDirections = UIPopoverArrowDirectionUp;
    pop.sourceView = popover.view;
    pop.barButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button];
    [self presentViewController:popover animated:YES completion:nil];
}


/**
 *  选中筛选条件对象typecode
 *
 *  @param index NSString
 */
- (void)returnCellindexpathwithrow:(NSString *)type withCellTitle:(NSString *)title withSelected:(NSInteger)selected
{
    switch (selected) {
        case 0://支付方式
        {
            [self.payTypeButton setTitle:title forState:UIControlStateNormal];
            self.payTreasureButton.selected = NO;
            self.WeixiPayButton.selected = NO;
            self.showPayQrCodeImageView.hidden = YES;
        }
            break;
        case 1://是否开票
        {
            [self.ISinvoiceButton setTitle:title forState:UIControlStateNormal];
        }
            break;
        case 2://发票类型
        {
            [self.invoiceType setTitle:title forState:UIControlStateNormal];
        }
            break;
            
        default:
            break;
    }
}


#pragma mark -确认支付请求
- (void)surePayRequest
{
    OrderPayRequest *order = [[OrderPayRequest alloc]init];
    order.orderNumber =  self.orderCode;
    order.fnewstate =  PAYSUCCESS;
    order.oldstate =  NOTPAY;
    order.realAmount = [NSNumber numberWithFloat:[[self.goodsAllPrice.text substringFromIndex:1] floatValue]];
    // 查询是否有京东E卡促销、是否有导购抽奖
    NSInteger totalNumber = 0;
    NSMutableArray *readPacketArray = [NSMutableArray array];
    for (id object in self.guidePromotionArray) {
        if ([object isKindOfClass:[PromotionJDECardModel class]]) {
            PromotionJDECardModel *model = (PromotionJDECardModel *)object;
            if ([model.type isEqualToString:JDECardAction] && [model.body isEqualToString:GUIDE]) {
                totalNumber += model.total;
            }
        }
        if ([object isKindOfClass:[PromotionLuckyDrawModel class]]) {
            PromotionLuckyDrawModel *model = (PromotionLuckyDrawModel *)object;
            if ([model.body isEqualToString:GUIDE]) {
                order.lotteryId = model.lottery.uuid;
            }
        }
        if ([object isKindOfClass:[PromotionalReadPacketModel class]]) {
            PromotionalReadPacketModel *model = (PromotionalReadPacketModel *)object;
            if ([model.body isEqualToString:GUIDE]) {
                RedPackageDetail *entity = [[RedPackageDetail alloc] init];
                entity.money = [NSNumber numberWithInteger:model.total];
                entity.promotionBillNumber = model.promotionBillNumber;
                entity.redPrority = [NSString stringWithFormat:@"%ld",model.priority];
                [readPacketArray addObject:entity];
            }
        }        
    }
    order.redPackageDetails = (NSArray<RedPackageDetail> *)readPacketArray;
    order.jdCardDenomation = totalNumber;
    // 查询是否有消费者抽奖促销、微信卡劵促销、抵扣金额、商品促销
    CGFloat promotionMoney = 0;
    NSInteger deductionPrority = 0;//抵扣优先级
    NSInteger goodsPrority = 0;//商品促销优先级
    NSMutableArray *goodsArray = [NSMutableArray array];
    for (id object in self.consumerPromotionalArray) {
        if ([object isKindOfClass:[PromotionLuckyDrawModel class]]) {
            PromotionLuckyDrawModel *model = (PromotionLuckyDrawModel *)object;
            if ([model.body isEqualToString:CONSUMER]) {
                order.drawId = self.resultModel.drawId;
                order.drawPrority = model.priority;
            }
        }
        if ([object isKindOfClass:[PromotionWeChatCardModel class]]) {
            PromotionWeChatCardModel *model = (PromotionWeChatCardModel *)object;
            if ([model.body isEqualToString:CONSUMER]) {
                if (![[self class] isBlankString:self.weChatModel.wxcardNumber]) {
                    order.wxcardNumber = self.weChatModel.wxcardNumber;
                    order.wxcardDenomation = [NSNumber numberWithInteger:self.weChatModel.wxcardDenomation];
                    order.wxCardPrority = model.priority;
                }
            }
        }
        if ([object isKindOfClass:[PromotionalDeductionModel class]]) {
            PromotionalDeductionModel *model = (PromotionalDeductionModel *)object;
            if (model.isSelected) {
                promotionMoney += model.total;
                deductionPrority = model.priority;
            }
        }
        if ([object isKindOfClass:[PromotionalGoodsModel class]]) {
            PromotionalGoodsModel *model = (PromotionalGoodsModel *)object;
            if (model.isSelected) {
                PromotionGoods *goods = [[PromotionGoods alloc]init];
                UCN *goodDetails = [[UCN alloc]init];
                goodDetails.code = model.goods.code;
                goodDetails.uuid = model.goods.uuid;
                goodDetails.name = model.goods.name;
                goods.goods = goodDetails;
                goods.promotionNumber = [NSNumber numberWithInteger:model.count];
                [goodsArray addObject:goods];
            }
            goodsPrority = model.priority;
        }
    }
    order.promotionMoney = @(promotionMoney);
    order.deductionPrority = deductionPrority;
    order.promotionGoods = (NSArray<PromotionGoods> *)goodsArray;
    order.goodsPrority = goodsPrority;
    //支付类型
    if (self.payTreasureButton.selected) {
       order.payType =  @"005";
    }else if (self.WeixiPayButton.selected){
        order.payType = @"006";
    }else{
        order.payType =  [self PayTypeSelected:self.payTypeButton.currentTitle];
    }
    //是否开票
    if ([self.ISinvoiceButton.currentTitle isEqualToString:@"是"]) {
        order.isbill = @"Y";
    }
    else if ([self.ISinvoiceButton.currentTitle isEqualToString:@"否"]){
       order.isbill =  @"N";
    }
    //发票类型
    if ([self.invoiceType.currentTitle isEqualToString:@"公司发票"] && [order.isbill isEqualToString:@"Y"]) {
        order.billType =  @"002";
        if (self.invoiceHeader.text.length == 0 || !self.invoiceHeader.text) {
            [XBLoadingView showHUDViewWithText:@"发票抬头不能为空"];
            return;
        }
        order.billTitle = self.invoiceHeader.text;
    }else if ([self.invoiceType.currentTitle isEqualToString:@"个人发票"] && [order.isbill isEqualToString:@"Y"])
    {
        order.billType =  @"001";
    }
    [XBLoadingView showHUDViewWithDefault];
    WS(weakSelf);
    [HTTP networkRequestWithURL:SERVERREQUESTURL(CONFIRMPAY)  withRequestType:ZERO withParameter:order withReturnValueBlock:^(id returnValue) {
        
        [XBLoadingView hideHUDViewWithDefault];
        if (RESULT(returnValue)) {
            [weakSelf dismissViewControllerAnimated:YES completion:^{
                if (weakSelf.PaySuccessReturnBlock) {
                    weakSelf.PaySuccessReturnBlock();
                }
            }];
        }else{
            [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
        }
    }withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}

#pragma mark -支付方式选择
- (NSString *)PayTypeSelected:(NSString *)selecte
{
    NSString *payCode = nil;
    if ([selecte isEqualToString:@"现金"]) {
        return payCode = @"001";
    }
    if ([selecte isEqualToString:@"刷卡"]) {
        return payCode = @"002";
    }
    if ([selecte isEqualToString:@"转账"]) {
        return payCode = @"003";
    }
    if ([selecte isEqualToString:@"支票"]) {
        return payCode = @"004";
    }
    return nil;
}


#pragma mark -开始编辑
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if ([self.ISinvoiceButton.currentTitle isEqualToString:@"否"]) {
        [XBLoadingView showHUDViewWithText:@"请选择开票"];
        return NO;
    }
    return YES;
}

#pragma mark -结束编辑
- (void)textFieldDidEndEditing:(UITextField *)textField
{
    self.myScrollView.contentOffset = CGPointMake(0, 0);
}

#pragma mark - 价格疑问
- (IBAction)priceQuestionButtonClickAction:(UIButton *)sender {
        
    UIAlertController *alertVc = [UIAlertController alertControllerWithTitle:nil message:self.totalAmountSource preferredStyle:UIAlertControllerStyleAlert];
    [alertVc addAction:[UIAlertAction actionWithTitle:@"我知道了" style:UIAlertActionStyleCancel handler:nil]];
    [self presentViewController:alertVc animated:YES completion:nil];
}




@end