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

#import "OrderdetailsViewController.h"
#import "OrderInformationTableViewCell.h"
#import "PersonInformationTableViewCell.h"
#import "GoodsInformationTableViewCell.h"
#import "CommodityListTableViewCell.h"
#import "AllpriceTableViewCell.h"
#import "SettlementViewController.h"
#import "AdditionalTableViewCell.h"
#import <QuickLook/QuickLook.h>
#import "CustomWKWebViewController.h"
#import "ShareGoodsViewController.h"
#import "OrderDetailsSectionHeaderView.h"
#import "PromotionalDeductionModel.h"
#import "PromotionalGoodsModel.h"
#import "PromotionalTableViewCell.h"
#import "JDEcardViewController.h"
#import "WYPopoverController.h"
#import "RebateSuccessTableViewController.h"
#import "PromotionLuckyDrawModel.h"
#import "PromotionLuckDrawResultModel.h"
#import "AirPrintManager.h"
#import <WebKit/WebKit.h>
#import "PromotionJDECardModel.h"
#import "PromotionWeChatCardModel.h"
#import "PromotionChooseViewController.h"
#import "PromotionChooseNavigationController.h"
#import "QRViewController.h"
#import "PromotionalReadPacketModel.h"


NSString *const PROMOTIONALSTRING = @"促销信息";



@interface OrderdetailsViewController ()<UITableViewDelegate,UITableViewDataSource,QLPreviewControllerDataSource,WKNavigationDelegate,confirmPromotionDelegate,DZNEmptyDataSetSource,DZNEmptyDataSetDelegate>
@property (nonatomic,strong) WKWebView *webView;

/**
 *  订单详情数据
 */
@property (nonatomic,strong) OrderBill *orderDetails;

/**
 *  本地存储地址
 */
@property (nonatomic,copy) NSString *PDFpath;


/**
 *  已享受促销信息
 */
@property (nonatomic,strong) NSMutableArray *promotionInformationArray;

/**
 *  京东E卡
 */
@property (nonatomic,strong) WYPopoverController *settingsPopoverController;

/**
 *  客户抽奖结果
 */
@property (nonatomic,strong) PromotionLuckDrawResultModel *customerDrawModel;

/**
   消费者促销列表
 */
@property (nonatomic,strong) NSMutableArray *customerPromotionArray;

/**
   导购促销列表
 */
@property (nonatomic,strong) NSMutableArray *guidePromotionArray;


/**
 微信卡劵
 */
@property (nonatomic,strong) WeChatCardModel *weChatModel;

/**
 扫描微信卡劵（重试）
 */
@property (nonatomic,strong) PromotionWeChatCardModel *tempWeChatModel;




@end

@implementation OrderdetailsViewController

#pragma mark - lazy
- (NSMutableArray *)sectionTitle
{
    if (!_sectionTitle) {
        _sectionTitle = [NSMutableArray arrayWithObjects:@"订单信息",@"客户信息",@"收货信息",@"商品信息",@"附件信息", nil];
    }
    return _sectionTitle;
}

- (NSMutableArray *)guidePromotionArray
{
    if (!_guidePromotionArray) {
        _guidePromotionArray = [NSMutableArray array];
    }
    return _guidePromotionArray;
}

- (NSMutableArray *)promotionInformationArray
{
    if (!_promotionInformationArray) {
        _promotionInformationArray = [NSMutableArray array];
    }
    return _promotionInformationArray;
}

- (NSMutableArray *)customerPromotionArray
{
    if (!_customerPromotionArray) {
        _customerPromotionArray = [NSMutableArray array];
    }
    return _customerPromotionArray;
}

- (WeChatCardModel *)weChatModel
{
    if (!_weChatModel) {
        _weChatModel = [[WeChatCardModel alloc]init];
    }
    return _weChatModel;
}

#pragma mark -渲染完成
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    
    if (self.isSliding) {
        self.navigationController.fd_fullscreenPopGestureRecognizer.enabled = NO;
        if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
            self.navigationController.interactivePopGestureRecognizer.enabled = NO;
        }
    }
}

#pragma mark -视图即将消失
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    // 开启
    self.navigationController.fd_fullscreenPopGestureRecognizer.enabled = YES;
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
}

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

#pragma mark - UI
- (void)uiConfigAction
{
    self.orderDetailsTableview.dataSource = self;
    self.orderDetailsTableview.delegate = self;
    //附加信息cell
    [self.orderDetailsTableview registerNib:[UINib nibWithNibName:@"AdditionalTableViewCell" bundle:nil] forCellReuseIdentifier:@"fifthcell"];
}


#pragma mark -获取订单详情、查询促销信息
- (void)getOrderDetailsData:(void(^)())finish
{
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_enter(group);
    [XBLoadingView showHUDViewWithDefault];
    WS(weakSelf);
    // 订单详情
    [HTTP networkWithDictionaryRequestWithURL:[NSString stringWithFormat:@"%@%@",SERVERREQUESTURL(ORDERDETAILS),self.orderCode]  withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
        
         dispatch_group_leave(group);
        if (RESULT(returnValue)) {
            weakSelf.orderDetails = [[OrderBill alloc]initWithDictionary:RESPONSE(returnValue) error:nil];
        }else{
            [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
        }
    }withFailureBlock:^(NSError *error) {
        dispatch_group_leave(group);
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
    
    // 未支付的订单查询实时促销，否则查询历史促销
    if (self.isShowPayButton) {
        // 查询实时促销信息
        dispatch_group_enter(group);
        [HTTP networkWithDictionaryRequestWithURL:[NSString stringWithFormat:SERVERREQUESTURL(PROMOTIONAL),self.orderCode]   withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
            
            dispatch_group_leave(group);
            [XBLoadingView hideHUDViewWithDefault];
            if (RESULT(returnValue)) {
                [weakSelf.promotionInformationArray removeAllObjects];
                [weakSelf.guidePromotionArray removeAllObjects];
                [weakSelf.customerPromotionArray removeAllObjects];
                NSArray *promotionalArray = RESPONSE(returnValue)[@"actions"];
                for (NSDictionary *dict in promotionalArray) {
                    NSString *type = dict[@"type"];
                        // 折扣金额
                    if ([type isEqualToString:deductionAction]) {
                        PromotionalDeductionModel *deductionModel = [[PromotionalDeductionModel alloc]initWithDictionary:dict error:nil];
                        [weakSelf getConsumerAllPromotion:deductionModel withBody:deductionModel.body];
                        // 赠送商品
                    }else if ([type isEqualToString:goodsAction]){
                        PromotionalGoodsModel *goodsModel = [[PromotionalGoodsModel alloc]initWithDictionary:dict error:nil];
                        [weakSelf getConsumerAllPromotion:goodsModel withBody:goodsModel.body];
                        // 京东E卡
                    }else if ([type isEqualToString:JDECardAction]){
                        PromotionJDECardModel *JDECardModel = [[PromotionJDECardModel alloc]initWithDictionary:dict error:nil];
                        [weakSelf getConsumerAllPromotion:JDECardModel withBody:JDECardModel.body];
                        // 转盘抽奖
                    }else if ([type isEqualToString:lotteryAction]){
                        PromotionLuckyDrawModel *drawModel = [[PromotionLuckyDrawModel alloc]initWithDictionary:dict error:nil];
                        [weakSelf getConsumerAllPromotion:drawModel withBody:drawModel.body];
                    }else if ([type isEqualToString:WeChatCard]){
                        // 微信卡劵
                        PromotionWeChatCardModel *weChatModel = [[PromotionWeChatCardModel alloc]initWithDictionary:dict error:nil];
                        [weakSelf getConsumerAllPromotion:weChatModel withBody:weChatModel.body];
                    }else if ([type isEqualToString:redPackageAction]){
                        // 现金红包
                        PromotionalReadPacketModel *readPacketModel = [[PromotionalReadPacketModel alloc]initWithDictionary:dict error:nil];
                        [weakSelf getConsumerAllPromotion:readPacketModel withBody:readPacketModel.body];
                    }
                    
                }
            }else{
                [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
            }
        } withFailureBlock:^(NSError *error) {
            dispatch_group_leave(group);
            [XBLoadingView showHUDViewWithText:error.localizedDescription];
        }];

    }else {
        // 查询历史促销信息
        dispatch_group_enter(group);
        [HTTP networkWithDictionaryRequestWithURL:[NSString stringWithFormat:SERVERREQUESTURL(OLDPROMOTIONAL),self.orderCode]   withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
            
            dispatch_group_leave(group);
            [XBLoadingView hideHUDViewWithDefault];
            if (RESULT(returnValue)) {
                [weakSelf.promotionInformationArray removeAllObjects];
                [weakSelf.guidePromotionArray removeAllObjects];
                [weakSelf.customerPromotionArray removeAllObjects];
                NSArray *promotion = RESPONSE(returnValue);
                for (NSDictionary *dict in promotion) {
                    TOOrderPromotionEntity *oldPromotion = [[TOOrderPromotionEntity alloc]initWithDictionary:dict error:nil];
                    NSString *type = dict[@"type"];
                    // 折扣金额
                    if ([type isEqualToString:deductionAction]) {
                        if (![weakSelf.sectionTitle containsObject:PROMOTIONALSTRING]) {
                            [weakSelf.sectionTitle addObject:PROMOTIONALSTRING];
                        }
                        PromotionalDeductionModel *deductionModel = [[PromotionalDeductionModel alloc]initWithDictionary:[oldPromotion toDictionary] error:nil];
                        deductionModel.total = [oldPromotion.promotionMoney integerValue];
                        deductionModel.isSelected = YES;
                        [weakSelf getConsumerAllPromotion:deductionModel withBody:deductionModel.body];
                    // 赠送商品
                    }else if ([type isEqualToString:goodsAction]){
                        if (![weakSelf.sectionTitle containsObject:PROMOTIONALSTRING]) {
                            [weakSelf.sectionTitle addObject:PROMOTIONALSTRING];
                        }
                        PromotionalGoodsModel *goodsModel = [[PromotionalGoodsModel alloc]initWithDictionary:[oldPromotion toDictionary] error:nil];
                        goodsModel.count = [oldPromotion.promotionNumber integerValue];
                        Goods *goods = [[Goods alloc]init];
                        goods.name = oldPromotion.goodsName;
                        goodsModel.goods = goods;
                        goodsModel.isSelected = YES;
                        [weakSelf getConsumerAllPromotion:goodsModel withBody:goodsModel.body];
                    // 京东E卡
                    }else if ([type isEqualToString:JDECardAction]){
                        PromotionJDECardModel *jdECardModel = [[PromotionJDECardModel alloc]initWithDictionary:[oldPromotion toDictionary] error:nil];
                        jdECardModel.total = [oldPromotion.jdecardDenomation integerValue];
                        [weakSelf getConsumerAllPromotion:jdECardModel withBody:jdECardModel.body];
                    // 转盘抽奖
                    }else if ([type isEqualToString:dzpRedPackage]){
                        PromotionLuckyDrawModel *guideDrawModel = [[PromotionLuckyDrawModel alloc]initWithDictionary:[oldPromotion toDictionary] error:nil];
                        [weakSelf getConsumerAllPromotion:guideDrawModel withBody:guideDrawModel.body];
                    // 微信卡劵
                    }else if ([type isEqualToString:WeChatCard]){
                        PromotionWeChatCardModel *weChatModel = [[PromotionWeChatCardModel alloc]initWithDictionary:[oldPromotion toDictionary] error:nil];
                        weChatModel.total = [oldPromotion.wxcardDenomation integerValue];
                        [weakSelf.promotionInformationArray addObject:weChatModel];
                        self.weChatModel.wxcardNumber = oldPromotion.wxcardNumber;
                        self.weChatModel.wxcardDenomation = [oldPromotion.wxcardDenomation integerValue];
                        [weakSelf getConsumerAllPromotion:weChatModel withBody:weChatModel.body];
                    // 现金红包
                    }else if ([type isEqualToString:redPackageAction]){
                        PromotionalReadPacketModel *readPacketModel = [[PromotionalReadPacketModel alloc]initWithDictionary:[oldPromotion toDictionary] error:nil];
                        readPacketModel.total = [oldPromotion.redPackageNumber integerValue];
                        [weakSelf getConsumerAllPromotion:readPacketModel withBody:readPacketModel.body];
                    }
                }
                if (self.promotionInformationArray.count && ![self.sectionTitle containsObject:PROMOTIONALSTRING]) {
                    [self.sectionTitle addObject:PROMOTIONALSTRING];
                }
            }
        }withFailureBlock:^(NSError *error) {
            dispatch_group_leave(group);
            [XBLoadingView showHUDViewWithText:error.localizedDescription];
        }];
    }
    /// 查询客户订单抽奖状态
    __block RsAwardDraw *resultModel = nil;
    dispatch_group_enter(group);
    RsLotteryRequest *queryDrawState = [[RsLotteryRequest alloc]init];
    // 判断订单是否支付
    if (!self.isShowPayButton) {
       queryDrawState.orderNumberEquals = self.orderCode;
    }
    queryDrawState.winnerIdEquals = self.consumerID?self.consumerID:[Customermanager manager].model.fid;
    queryDrawState.stateEquals = self.isShowPayButton?ACCOMPLISHED:USED;
    DataPage *page = [[DataPage alloc]init];
    page.page = ZERO;
    page.rows = ONE;
    queryDrawState.page = page;
    [HTTP networkRequestWithURL:SERVERREQUESTURL(LOTTERYED)  withRequestType:ZERO withParameter:queryDrawState withReturnValueBlock:^(id returnValue) {
        dispatch_group_leave(group);
        if (RESULT(returnValue)) {
            NSDictionary *dict = [RESPONSE(returnValue)[@"list"] firstObject];
            resultModel = [[RsAwardDraw alloc]initWithDictionary:dict error:nil];
        }
    } withFailureBlock:^(NSError *error) {
        dispatch_group_leave(group);
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
    // 完成后回调
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        
        if (self.isShowPayButton) {
            [self createTableviewFooterView];
        }
        if (self.isShowHeaderView) {
            [self createTableviewHeaderView];
        }
        self.orderDetailsTableview.emptyDataSetSource = self;
        self.orderDetailsTableview.emptyDataSetDelegate = self;
            // 有促销未支付情况
        if (weakSelf.isShowPayButton && [weakSelf.orderDetails.order.orderState isEqualToString:NOTPAY] && weakSelf.customerPromotionArray.count) {
            // 有抽奖结果未使用
            if (resultModel.award) {
                weakSelf.customerDrawModel = [PromotionLuckDrawResultModel initializeWith:resultModel];
            }
            PromotionChooseNavigationController *promotionChooseNav = [[[weakSelf class] getMainStoryboardClass] instantiateViewControllerWithIdentifier:@"PromotionChooseNavigationController"];
            PromotionChooseViewController *promotionChoose = (PromotionChooseViewController *)promotionChooseNav.visibleViewController;
            promotionChoose.promotionDelegate = self;
            promotionChoose.promotionDatasArray = weakSelf.customerPromotionArray;
            promotionChooseNav.preferredContentSize = CGSizeMake(ScreenHeight-300, ScreenHeight-300);
            promotionChooseNav.modalPresentationStyle = UIModalPresentationFormSheet;
            UIPopoverPresentationController *pop = promotionChooseNav.popoverPresentationController;
            pop.permittedArrowDirections = UIPopoverArrowDirectionAny;
            pop.sourceView = promotionChooseNav.view;
            [self presentViewController:promotionChooseNav animated:YES completion:nil];
            
        }else if ([weakSelf.orderDetails.order.orderState isEqualToString:NOTPAY] && weakSelf.isShowPayButton && !weakSelf.customerPromotionArray.count) {
            // 无促销未支付情况
            [weakSelf payButtonClickAction];
            
        }else if (![weakSelf.orderDetails.order.orderState isEqualToString:NOTPAY] && resultModel.award) {
            // 已支付,且有抽奖结果情况
            weakSelf.customerDrawModel = [PromotionLuckDrawResultModel initializeWith:resultModel];
        }
        if (finish) {
            finish();
        }
        [weakSelf.orderDetailsTableview reloadData];
    });
}

#pragma mark - 选择消费者促销项回调
- (void)confirmChoosePromotion:(NSArray<CustomPromotionModel *> *)promotionArray
{
    for (CustomPromotionModel *promotionModel in promotionArray) {
        for (JSONModel *originalModel in self.customerPromotionArray) {
                //微信卡劵
            if ([originalModel isMemberOfClass:[PromotionWeChatCardModel class]]) {
                PromotionWeChatCardModel *weChatModel = (PromotionWeChatCardModel *)originalModel;
                if ([weChatModel.body isEqualToString:promotionModel.body] && [weChatModel.type isEqualToString:promotionModel.type] && [weChatModel.descriptionString isEqualToString:promotionModel.descriptionString] && weChatModel.priority == promotionModel.priority && [weChatModel.conflicts isEqualToArray:promotionModel.conflicts]) {
                    weChatModel.isSelected = YES;
                    [self.promotionInformationArray addObject:weChatModel];
                }
            }else if ([originalModel isMemberOfClass:[PromotionalDeductionModel class]]) {
                //抵扣
                PromotionalDeductionModel *deductionModel = (PromotionalDeductionModel *)originalModel;
                if ([deductionModel.body isEqualToString:promotionModel.body] && [deductionModel.type isEqualToString:promotionModel.type] && [deductionModel.descriptionString isEqualToString:promotionModel.descriptionString] && deductionModel.priority == promotionModel.priority && [deductionModel.conflicts isEqualToArray:promotionModel.conflicts]) {
                    deductionModel.isSelected = YES;
                    [self.promotionInformationArray addObject:deductionModel];
                }
            }else if ([originalModel isMemberOfClass:[PromotionLuckyDrawModel class]]) {
                //抽奖
                PromotionLuckyDrawModel *drawModel = (PromotionLuckyDrawModel *)originalModel;
                if ([drawModel.body isEqualToString:promotionModel.body] && [drawModel.type isEqualToString:promotionModel.type] && [drawModel.descriptionString isEqualToString:promotionModel.descriptionString] && drawModel.priority == promotionModel.priority && [drawModel.conflicts isEqualToArray:promotionModel.conflicts]) {
                    drawModel.isSelected = YES;
                    [self.promotionInformationArray addObject:drawModel];
                }
            }else if ([originalModel isMemberOfClass:[PromotionalGoodsModel class]]) {
                //送商品
                PromotionalGoodsModel *goodsModel = (PromotionalGoodsModel *)originalModel;
                if ([goodsModel.body isEqualToString:promotionModel.body] && [goodsModel.type isEqualToString:promotionModel.type] && [goodsModel.descriptionString isEqualToString:promotionModel.descriptionString] && goodsModel.priority == promotionModel.priority && [goodsModel.conflicts isEqualToArray:promotionModel.conflicts]) {
                    goodsModel.isSelected = YES;
                    [self.promotionInformationArray addObject:goodsModel];
                }
            }
        }
    }
    if (self.promotionInformationArray.count && ![self.sectionTitle containsObject:@"促销信息"]) {
        [self.sectionTitle addObject:@"促销信息"];
    }
    [self promotionInformationExecutionOrder];
}

#pragma mark - 促销信息执行顺序
- (void)promotionInformationExecutionOrder
{
    PromotionLuckyDrawModel *drawModel = nil;
    PromotionWeChatCardModel *weChatModel = nil;
    for (JSONModel *model in self.promotionInformationArray) {
        // 抽奖
        if ([model isMemberOfClass:[PromotionLuckyDrawModel class]]) {
            drawModel = (PromotionLuckyDrawModel *)model;
            if ([drawModel.body isEqualToString:GUIDE]) {
                drawModel = nil;
            }
        }
        // 微信卡劵支付
        if ([model isMemberOfClass:[PromotionWeChatCardModel class]]) {
            weChatModel = (PromotionWeChatCardModel *)model;
        }
    }
    //通过促销优先级决定调用顺序
    if (drawModel.priority > weChatModel.priority) {
        
        if (!drawModel.isUsed && drawModel) {
            drawModel.isUsed = YES;
            [self queryConsumerLuckyDrawChance:drawModel];
        }else if (!weChatModel.isUsed && weChatModel) {
            weChatModel.isUsed = YES;
            [self scanWeChatCardNumber:weChatModel];
        }else{
            [self payButtonClickAction];
        }
        
    }else if (drawModel.priority < weChatModel.priority) {
        
        if (!weChatModel.isUsed && weChatModel) {
            weChatModel.isUsed = YES;
            [self scanWeChatCardNumber:weChatModel];;
        }else if (!drawModel.isUsed && drawModel) {
            drawModel.isUsed = YES;
            [self queryConsumerLuckyDrawChance:drawModel];
        }else{
            [self payButtonClickAction];
        }
        
    }else if (drawModel.priority == weChatModel.priority && drawModel && weChatModel) {
        
        if (!drawModel.isUsed && drawModel) {
            drawModel.isUsed = YES;
            [self queryConsumerLuckyDrawChance:drawModel];
        }else if (!weChatModel.isUsed && weChatModel) {
            weChatModel.isUsed = YES;
            [self scanWeChatCardNumber:weChatModel];
        }else{
            [self payButtonClickAction];
        }
    }
    [self.orderDetailsTableview reloadData];
    [self.orderDetailsTableview layoutIfNeeded];
    //赠送商品或抵扣情况
    if (!drawModel && !weChatModel) {
        [self payButtonClickAction];
    }
}


#pragma mark - 扫描微信卡劵
- (void)scanWeChatCardNumber:(PromotionWeChatCardModel *)weChatModel
{
    WS(weakSelf);
    self.tempWeChatModel = weChatModel;
    QRViewController *scanVC = [[QRViewController alloc] initWithScanCompleteHandler:^(NSString *url) {
        [weakSelf dismissViewControllerAnimated:YES completion:^{
            weakSelf.weChatModel.wxcardNumber = url;
            [weakSelf consumerUseWeChatCard:url andOrderTotal:[weakSelf.orderDetails.order.orderPrice stringValue] andOrderNumber:self.orderCode];
        }];
    }];
    [scanVC setCancelScanBlock:^{
        for (JSONModel *model in weakSelf.promotionInformationArray) {
            if ([model isMemberOfClass:[PromotionWeChatCardModel class]]) {
                [weakSelf.promotionInformationArray removeObject:model];break;
            }
        }
        if (!weakSelf.promotionInformationArray.count) {
            if ([weakSelf.sectionTitle containsObject:@"促销信息"]) {
                [weakSelf.sectionTitle removeLastObject];
            }
        }
        [weakSelf promotionInformationExecutionOrder];
    }];
    dispatch_async(dispatch_get_main_queue(), ^{
        [weakSelf presentViewController:scanVC animated:YES completion:nil];
    });
}

#pragma mark - 使用微信卡劵
- (void)consumerUseWeChatCard:(NSString *)number andOrderTotal:(NSString *)orderTotal andOrderNumber:(NSString *)orderNumber
{
    WS(weakSelf);
    [XBLoadingView showHUDViewWithDefault];
    [HTTP networkWithDictionaryRequestWithURL:[NSString stringWithFormat:USEWECHATCARD,number,orderNumber,orderTotal]  withRequestType:ZERO withParameter:nil withReturnValueBlock:^(id returnValue) {
        
        [XBLoadingView hideHUDViewWithDefault];
        if (RESULT(returnValue)) {
            weakSelf.weChatModel.wxcardDenomation = [RESPONSE(returnValue)[@"denomation"] integerValue];
            weakSelf.weChatModel.payNo = RESPONSE(returnValue)[@"payNo"];
            for (JSONModel *model in weakSelf.promotionInformationArray) {
                if ([model isMemberOfClass:[PromotionWeChatCardModel class]]) {
                    PromotionWeChatCardModel *weChatModel = (PromotionWeChatCardModel *)model;
                    weChatModel.total = weakSelf.weChatModel.wxcardDenomation;break;
                }
            }
            [XBLoadingView showHUDViewWithText:[NSString stringWithFormat:@"微信卡劵(%ld元)使用成功",weakSelf.weChatModel.wxcardDenomation]];
            [weakSelf promotionInformationExecutionOrder];
        }else{
            ShowDefaultAlertView(self, nil, [NSString stringWithFormat:@"微信卡劵使用失败:(%@),是否重试？",returnValue[@"msg"]], UIAlertControllerStyleAlert, ^{
                [weakSelf scanWeChatCardNumber:weakSelf.tempWeChatModel];
            }, ^{
                 [weakSelf promotionInformationExecutionOrder];
            });
        }

    }withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}


#pragma mark - 获取关于消费者的所有促销
- (void)getConsumerAllPromotion:(JSONModel *)model withBody:(NSString *)body
{
    if ([body isEqualToString:CONSUMER]) {
       [self.customerPromotionArray addObject:model];
    }else if ([body isEqualToString:GUIDE]) {
        [self.guidePromotionArray addObject:model];
    }
}

#pragma mark - 卡劵领取成功
- (void)rebateApplySuccess:(NSString *)message
{
    RebateSuccessTableViewController *success = [[[self class] getMainStoryboardClass] instantiateViewControllerWithIdentifier:@"RebateSuccessTableViewController"];
    success.titleArray = @[message,@"查看账户",@"我知道了"];
    [success setClickEvent:^(NSIndexPath *indexPath) {
        if (indexPath.row == 1) {
            // 我知道了
        }else if (indexPath.row == 0)
        {
            [SHARED_APPDELEGATE.tabBarController switchSelectedIndex:103];
            [SHARED_APPDELEGATE.tabBarController setSelectedIndex:4];
        }
    }];
    success.preferredContentSize = CGSizeMake(315, 320);
    success.modalPresentationStyle = UIModalPresentationFormSheet;
    UIPopoverPresentationController *pop = success.popoverPresentationController;
    pop.permittedArrowDirections = UIPopoverArrowDirectionAny;
    pop.sourceView = success.view;
    [self presentViewController:success animated:YES completion:nil];
}

#pragma mark - 显示京东E卡
- (void)showJDECard
{
    WS(weakSelf);
    JDEcardViewController *jdeCard = [[[weakSelf class] getMainStoryboardClass] instantiateViewControllerWithIdentifier:@"JDEcardViewController"];
    [jdeCard setDismissJDECardBlock:^{
        [weakSelf.settingsPopoverController dismissPopoverAnimated:YES];
    }];
    jdeCard.preferredContentSize = CGSizeMake(400, 247);
    self.settingsPopoverController = [[WYPopoverController alloc] initWithContentViewController:jdeCard];
    self.settingsPopoverController.popoverLayoutMargins = UIEdgeInsetsMake(10, 20, 10, 20);
    self.settingsPopoverController.wantsDefaultContentAppearance = NO;
    self.settingsPopoverController.theme.fillBottomColor = [UIColor clearColor];
    self.settingsPopoverController.theme.fillTopColor = [UIColor clearColor];
    self.settingsPopoverController.theme.glossShadowColor = [UIColor clearColor];
    [self.settingsPopoverController presentPopoverAsDialogAnimated:YES
                                                           options:WYPopoverAnimationOptionFadeWithScale];
}

#pragma mark -TableviewHeader------根据不同的订单状态判断是否显示
- (void)createTableviewHeaderView
{
    UIView *headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, 60)];
    //预览
    UIButton *previewButton = [UIButton buttonWithType:UIButtonTypeSystem];
    previewButton.frame = CGRectMake(50, 15, 150, 30);
    [previewButton setTitle:self.isShowPayButton?@"撤销订单":@"预览" forState:UIControlStateNormal];
    previewButton.titleLabel.font = [UIFont systemFontOfSize:12];
    [previewButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [previewButton addTarget:self action:@selector(PreviewButtonClick:) forControlEvents:UIControlEventTouchUpInside];
    previewButton.backgroundColor = kMainBlueColor;
    previewButton.layer.masksToBounds = YES;
    previewButton.layer.cornerRadius = kCornerRadius;
    [headerView addSubview:previewButton];
    
    //显示支付按钮的情况下，不显示打印按钮
    if (!self.isShowPayButton) {
     
        //打印
        UIButton *printButton = [UIButton buttonWithType:UIButtonTypeSystem];
        printButton.frame = CGRectMake(ScreenWidth-50-150, 15, 150, 30);
        [printButton setTitle:@"打印" forState:UIControlStateNormal];
        [printButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        printButton.titleLabel.font = [UIFont systemFontOfSize:12];
        [printButton addTarget:self action:@selector(AirprintButtonClick:) forControlEvents:UIControlEventTouchUpInside];
        printButton.layer.masksToBounds = YES;
        printButton.layer.cornerRadius = kCornerRadius;
        printButton.backgroundColor = kMainBlueColor;
        [headerView addSubview:printButton];
        
        //分享
        UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeSystem];
        shareButton.frame = CGRectMake(ScreenWidth-50-350, 15, 150, 30);
        [shareButton setTitle:@"分享" forState:UIControlStateNormal];
        [shareButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        shareButton.titleLabel.font = [UIFont systemFontOfSize:12];
        [shareButton addTarget:self action:@selector(ShareButtonClick:) forControlEvents:UIControlEventTouchUpInside];
        shareButton.layer.masksToBounds = YES;
        shareButton.layer.cornerRadius = kCornerRadius;
        shareButton.backgroundColor = kMainBlueColor;
        [headerView addSubview:shareButton];
    }
    //横线
    UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(0, 59, ScreenWidth, 1)];
    lineView.backgroundColor = RGB(193, 193, 193,1);
    [headerView addSubview:lineView];
    self.orderDetailsTableview.tableHeaderView = headerView;
}

#pragma mark -TableviewFooterView------根据不同的订单状态判断支付按钮是否显示
- (void)createTableviewFooterView
{
    UIView *footerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, 100)];
    //支付
    UIButton *payButton = [UIButton buttonWithType:UIButtonTypeSystem];
    payButton.frame = CGRectMake((ScreenWidth-150)/2, 30, 150, 40);
    [payButton setTitle:@"支付" forState:UIControlStateNormal];
    payButton.titleLabel.font = [UIFont systemFontOfSize:15];
    [payButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [payButton addTarget:self action:@selector(payButtonClickAction) forControlEvents:UIControlEventTouchUpInside];
    payButton.backgroundColor = kMainBlueColor;
    payButton.layer.masksToBounds = YES;
    payButton.layer.cornerRadius = kCornerRadius;
    [footerView addSubview:payButton];
    self.orderDetailsTableview.tableFooterView = footerView;
}

#pragma mark - 查询客户抽奖机会
- (void)queryConsumerLuckyDrawChance:(PromotionLuckyDrawModel *)model
{
    WS(weakSelf);
    //判断是否有已抽奖未使用情况
    if (![[self class] isBlankString:self.customerDrawModel.drawId]) {
        ShowAlertView(self, nil, @"您有一个抽奖结果未使用，本次支付会默认使用", nil, @"我知道了", UIAlertControllerStyleAlert, ^{
            [weakSelf promotionInformationExecutionOrder];
        }, nil);
    }else {
        ShowAlertView(self, nil, @"恭喜您获得一次大转盘抽奖机会!", nil, @"马上参与", UIAlertControllerStyleAlert, ^{
            [weakSelf showLuckyDrawControl:model.lottery.uuid andOrderNumber:weakSelf.orderCode luckyDrawFinish:^(NSDictionary *dict) {
                weakSelf.customerDrawModel = [[PromotionLuckDrawResultModel alloc]initWithDictionary:dict error:nil];
                if ([BaseViewController isBlankString:weakSelf.customerDrawModel.awardId]) {
                    [XBLoadingView showHUDViewWithText:@"未中奖"];
                }else {
                    [XBLoadingView showHUDViewWithText:[NSString stringWithFormat:@"恭喜你获得了 %@",weakSelf.customerDrawModel.descriptionString]];
                }
            }];
        }, nil);
    }
}


#pragma mark -调出支付框
- (void)payButtonClickAction
{
    SettlementViewController *settlement = [[SettlementViewController alloc]init];
    settlement.preferredContentSize = CGSizeMake(380, 500);
    settlement.goodsArray = self.orderDetails.orderdetailList;
    settlement.consumerPromotionalArray = self.promotionInformationArray;
    settlement.guidePromotionArray = self.guidePromotionArray;
    settlement.orderCode = self.orderCode;
    settlement.resultModel = self.customerDrawModel;
    settlement.weChatModel = self.weChatModel;
    settlement.modalPresentationStyle = UIModalPresentationFormSheet;
    UIPopoverPresentationController *pop = settlement.popoverPresentationController;
    pop.sourceView = settlement.view;
    [self presentViewController:settlement animated:YES completion:nil];
    //支付成功
    WS(weakSelf);
    [settlement setPaySuccessReturnBlock:^{

        if (weakSelf.DelecteAndPayButtonBlock) {
            weakSelf.DelecteAndPayButtonBlock(_cellindex,PAYSUCCESS);
        }
        [XBLoadingView showHUDViewWithSuccessText:@"支付成功" completeBlock:nil];
        weakSelf.isShowPayButton = NO;
        weakSelf.isShowHeaderView = YES;
        weakSelf.isUserInteractionEnabled = NO;
        [weakSelf createTableviewHeaderView];
        weakSelf.orderDetailsTableview.tableFooterView = nil;
        /// 刷新数据成功
        [weakSelf getOrderDetailsData:^{
            [weakSelf showGuidePromotionDetails];
        }];
    }];
}

#pragma mark -弹框显示获得促销详情
- (void)showGuidePromotionDetails
{
    __block BOOL isJDEcard = NO;//促销中是否有京东E卡；
    __block BOOL isGuideDraw = NO;//促销中是否有导购抽奖机会
    __block BOOL isReadPacket = NO;//促销中是否有红包
    // 先判断促销中有无京东E卡，有则认为发放成功
    for (id object in self.guidePromotionArray) {
        if ([object isKindOfClass:[PromotionJDECardModel class]]) {
            PromotionJDECardModel *model = (PromotionJDECardModel *)object;
            if ([model.type isEqualToString:JDECardAction]) {
                isJDEcard = YES;break;
            }
        }
        // 查询促销中是否有红包
        if ([object isKindOfClass:[PromotionalReadPacketModel class]]) {
            PromotionalReadPacketModel *model = (PromotionalReadPacketModel *)object;
            if ([model.type isEqualToString:redPackageAction]) {
                isReadPacket = YES;break;
            }
        }
        // 查询导购抽奖机会
        if ([object isKindOfClass:[PromotionLuckyDrawModel class]]) {
            PromotionLuckyDrawModel *model = (PromotionLuckyDrawModel *)object;
            if ([model.body isEqualToString:GUIDE]) {
                isGuideDraw = YES;break;
            }
        }
    }
    // 弹出框
    NSMutableString *mutableString = [NSMutableString string];
    if (isJDEcard) {
        [mutableString appendString:@"京东E卡、"];
    }
    if (isGuideDraw) {
        [mutableString appendString:@"抽奖机会、"];
    }
    if (isReadPacket) {
        [mutableString appendString:@"现金红包、"];
    }
    if (isJDEcard || isGuideDraw || isReadPacket) {
        [mutableString appendString:@"已发放到您的账户"];
        [self rebateApplySuccess:mutableString];
    }
}

#pragma mark - 抽奖界面 HTML
- (void)showLuckyDrawControl:(NSString *)lotteryId andOrderNumber:(NSString *)orderNumber luckyDrawFinish:(void(^)(NSDictionary *dict))complete
{
    WS(weakSelf);
    CustomWKWebViewController *wkWebView = [[CustomWKWebViewController alloc]init];
    NSString *server = [NSString stringWithFormat:SERVERREQUESTURL(DRAW),lotteryId,@"",orderNumber];
     NSString *newServer = [server stringByReplacingOccurrencesOfString:@"/app" withString:@""];
    wkWebView.urlString = newServer;
    [wkWebView setLuckyDrawFinishBlock:^(NSDictionary *result) {
        complete(result);
    }];
    [wkWebView setDismissLuckyDrawController:^{
        [weakSelf promotionInformationExecutionOrder];
    }];
    [self presentViewController:wkWebView animated:YES completion:nil];
}


#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    switch (section) {
        case 0:
        case 1:
        case 2:
        case 4:
            return 1;
            break;
        case 3:
        {
            return self.orderDetails.orderdetailList.count+1;
        }
            break;
        case 5:
        {
            return self.promotionInformationArray.count;
        }
            break;
        default:
            break;
    }
    return 0;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    switch (indexPath.section) {
        case 0://订单信息
        {
            OrderInformationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"firstcell" forIndexPath:indexPath];
            cell.model = self.orderDetails;
            return cell;
        }
            break;
        case 1://客户信息
        {
            PersonInformationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"secondcell" forIndexPath:indexPath];
            cell.model = self.orderDetails.consumer;
            return cell;
        }
            break;
        case 2://收货信息
        {
            GoodsInformationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"thirdcell" forIndexPath:indexPath];
            cell.model = self.orderDetails.order;
            return cell;
        }
            break;
        case 3://商品清单
        {
            if (indexPath.row == self.orderDetails.orderdetailList.count) {
                
                //商品总计
                AllpriceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"sixthcell" forIndexPath:indexPath];
                cell.model = self.customerDrawModel;
                cell.weChatModel = self.weChatModel;
                cell.promotionalArray = self.promotionInformationArray;
                cell.goodsArray = self.orderDetails.orderdetailList;
                cell.selectionStyle = UITableViewCellSelectionStyleNone;
                return cell;
                
            }else
            {
                //单个商品
                CommodityListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"fourthcell" forIndexPath:indexPath];
                cell.orderDetailslist = [self.orderDetails.orderdetailList objectAtIndex_opple:indexPath.row];
                return cell;
            }
        }
            break;
        case 4://附件信息
        {
            
                AdditionalTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"fifthcell" forIndexPath:indexPath];
                cell.model = self.orderDetails.order;
                return cell;
        }
            break;
        case 5://促销信息
        {
            PromotionalTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PromotionalTableViewCell" forIndexPath:indexPath];
            cell.userInteractionEnabled = self.isUserInteractionEnabled;
            cell.model = self.customerDrawModel;
            cell.promotionModel = self.promotionInformationArray[indexPath.row];
            return cell;
        }
            break;
            
        default:
            break;
    }
    return [UITableViewCell new];
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section) {
        case 0:
        {
            return 84;
        }
            break;
        case 1:
        {
            return 110;
        }
            break;
        case 2:
        {
            return 90;
        }
            break;
        case 3:
        {
            //商品总计
            if (indexPath.row == self.orderDetails.orderdetailList.count) {
                
                return 50;
            }
            else
            {
            //单个商品
               return 80;
            }
        }
            break;
        case 4:
        {
            return 75;
        }
            break;
        case 5:
        {
            return 44;
        }
            break;
            
        default:
            break;
    }
    return 100;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    OrderDetailsSectionHeaderView *headerView = [tableView dequeueReusableCellWithIdentifier:@"OrderDetailsSectionHeaderView"];
    headerView.sectionHeaderTitleLabel.text = [self.sectionTitle objectAtIndex_opple:section];
    return headerView;
}


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 60;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//    if (indexPath.section == 5 && self.isUserInteractionEnabled) {
//        PromotionalTableViewCell *promotionalCell = [tableView cellForRowAtIndexPath:indexPath];
//        id object = self.promotionInformationArray[indexPath.row];
//        if ([object isKindOfClass:[PromotionalGoodsModel class]]) {
//            PromotionalGoodsModel *goodsModel = object;
//            goodsModel.isSelected = !goodsModel.isSelected;
//            promotionalCell.accessoryType = goodsModel.isSelected?UITableViewCellAccessoryCheckmark:UITableViewCellAccessoryNone;
//        }else if ([object isKindOfClass:[PromotionalDeductionModel class]]){
//            PromotionalDeductionModel *deductionModel = object;
//            deductionModel.isSelected = !deductionModel.isSelected;
//            promotionalCell.accessoryType = deductionModel.isSelected?UITableViewCellAccessoryCheckmark:UITableViewCellAccessoryNone;
//            // 刷新总金额
//            [self.orderDetailsTableview reloadData];
//        }
//    }
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.sectionTitle.count;
}

#pragma mark -打印订单
- (void)AirprintButtonClick:(UIButton *)button
{
    NSString *server = [NSString stringWithFormat:SERVERREQUESTURL(ORDERDETAILSURL),[Shoppersmanager manager].shoppers.employee.departid,self.orderCode];
    NSString *newServer = [server stringByReplacingOccurrencesOfString:@"/app" withString:@""];
    self.webView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:newServer]]];
    self.webView.navigationDelegate = self;
}

#pragma mark - <WKNavigationDelegate>
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation
{
    [XBLoadingView showHUDViewWithDefault];
}

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
    [XBLoadingView hideHUDViewWithDefault];
    [AirPrintManager printOrderWithdataSoure:[webView viewPrintFormatter] printSuccess:^{
        [XBLoadingView showHUDViewWithSuccessText:@"打印成功" completeBlock:nil];
    } printError:^{
        [XBLoadingView showHUDViewWithText:@"打印失败"];
    }];
}

- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
    [XBLoadingView showHUDViewWithText:@"操作失败"];
}


#pragma mark -预览订单、撤销订单
- (void)PreviewButtonClick:(UIButton *)button
{
    WS(weakSelf);
    if ([button.currentTitle isEqualToString:@"预览"]) {
        NSString *server = [NSString stringWithFormat:SERVERREQUESTURL(ORDERDETAILSURL),[Shoppersmanager manager].shoppers.employee.departid,self.orderCode];
        NSString *newServer = [server stringByReplacingOccurrencesOfString:@"/app" withString:@""];
        CustomWKWebViewController *pdfvc = [[CustomWKWebViewController alloc]init];
        pdfvc.urlString = newServer;
        [weakSelf presentViewController:pdfvc animated:YES completion:nil];
        
    }else if ([button.currentTitle isEqualToString:@"撤销订单"])
    {
        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"请确认是否撤销订单" preferredStyle:UIAlertControllerStyleAlert];
        [alertVC addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        }]];
        [alertVC addAction:[UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action)
        {
            [XBLoadingView showHUDViewWithDefault];
            [HTTP networkWithDictionaryRequestWithURL:[NSString stringWithFormat:@"%@%@/%@/%@",SERVERREQUESTURL(RESETORDER),_orderCode,@"001",@"005"]  withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
                [XBLoadingView hideHUDViewWithDefault];
                if (RESULT(returnValue)) {
                    [XBLoadingView showHUDViewWithSuccessText:@"撤销成功" completeBlock:nil];
                    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, 0.01)];
                    [weakSelf.orderDetailsTableview beginUpdates];
                    weakSelf.orderDetailsTableview.tableHeaderView = view;
                    weakSelf.orderDetailsTableview.tableFooterView = nil;
                    [weakSelf.orderDetailsTableview endUpdates];
                    weakSelf.orderDetails.order.orderState = @"005";
                    weakSelf.isUserInteractionEnabled = NO;
                    [weakSelf.orderDetailsTableview reloadData];
                    if (weakSelf.DelecteAndPayButtonBlock) {
                        weakSelf.DelecteAndPayButtonBlock(_cellindex,@"005");
                    }
                } else {
                    [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
                }
            } withFailureBlock:^(NSError *error) {
                [XBLoadingView hideHUDViewWithDefault];
                [XBLoadingView showHUDViewWithText:error.localizedDescription];
            }];
        }]];
        [self presentViewController:alertVC animated:YES completion:nil];
    }
}

- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
{
    return 1;
}

- (id)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{
    return self.PDFpath;
}

#pragma mark - 分享订单
- (void)ShareButtonClick:(UIButton *)sender
{
    ShareGoodsViewController *shareController = [[ShareGoodsViewController alloc]init];
    shareController.type = SHARE_ORDER;
    shareController.shareID = self.orderCode;
    shareController.shareImage = [UIImage imageNamed:@"Icon-83.5"];
    shareController.preferredContentSize = CGSizeMake(290, 120);
    shareController.modalPresentationStyle = UIModalPresentationPopover;
    UIPopoverPresentationController *popover = shareController.popoverPresentationController;
    popover.permittedArrowDirections = UIPopoverArrowDirectionUp;
    popover.barButtonItem = [[UIBarButtonItem alloc]initWithCustomView:sender];
    [self presentViewController:shareController animated:YES completion:nil];
}

#pragma mark -友好界面
- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView
{
    return kNoDataImage;
}

- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView
{
    return YES;
}

- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView
{
    return [[NSAttributedString alloc]initWithString:@"加载失败" attributes:nil];
}



@end
