//
//  KWMOrderVC.m
//  iCemarose
//
//  Created by HouWeiBin on 16/8/30.
//  Copyright © 2016年 kollway. All rights reserved.
//

#import "KWMOrderVC.h"
#import "KWMOrderCell.h"
#import "KWMNewProductVC.h"
#import "KWMImageUtil.h"
#import "KWMStringUtil.h"
#import "MJRefresh.h"

@interface KWMOrderVC ()
@property (nonatomic) NSMutableArray *productList;//订单商品列表
@property (nonatomic) NSMutableArray *expandOrderId;//标记展开的section
@end

@implementation KWMOrderVC{
}

+(NSString *)kwmTag{
    return @"KWMOrderVC";
}

-(void)awakeFromNib{
    [super awakeFromNib];
    self.title = @"我的订单";
}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:NO];
}

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

-(void)setUpData{
    self.productList = [NSMutableArray array];
    self.expandOrderId = [NSMutableArray array];
}

-(void)loadData{
    [self requestNewOrderAPI];
}

-(UITableView *)targetTableView{
    return self.tbvOrder;
}

-(BUYOrder *)getPaidOrder{
    if(self.paidCheckout){
        BUYOrder *order = [[BUYOrder alloc]init];
        order.checkout = self.paidCheckout;
        order.lineItems = self.paidCheckout.lineItems;
        order.totalPrice = self.paidCheckout.totalPrice;
        return order;
    }else{
        return nil;
    }
}

-(NSString *)getProductImage:(NSNumber *)productId{
    NSString *productImage = @"";
    if(productId){
        for(BUYProduct *product in self.productList){
            if([product.identifier isEqualToNumber:productId]){
                productImage = [KWMImageUtil getProductImageUrl:product ImageSize:LowImage];
            }
        }
    }
    return productImage;
}

-(BOOL)isContainId:(NSArray *)productIds productId:(NSNumber *)productId{
    for(NSNumber *mProductId in productIds){
        if([mProductId isEqualToNumber:productId]){
            return YES;
        }
    }
    return NO;
}

//每一个section有多少行
- (NSInteger)getRowCountBySection:(NSInteger)section{
    BUYOrder *order = [self.dataList objectAtIndex:section];
    NSArray<BUYLineItem *> *arr = [order.lineItems array];
    return arr?arr.count:0;
}

//将商品数量小于4的订单(完全展开的订单)添加到openSection中
-(void)refreshOpenSection:(NSArray<BUYOrder *> *)array{
    if(!array){
        return;
    }
    for(BUYOrder *order in array){
        NSArray<BUYLineItem *> *arr = [order.lineItems array];
        if(arr && arr.count > 4){
            return;
        }else if(order.identifier && ![self.expandOrderId containsObject:order.identifier]){
            [self.expandOrderId addObject:order.identifier];
        }
    }
}

#pragma mark -- UITableView Delegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return self.dataList.count;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    bool isExpend = YES;
    BUYOrder *order = [self.dataList objectAtIndex:section];
    NSArray<BUYLineItem *> *lineItems = [order.lineItems array];
    if(order.identifier){
        isExpend = [self.expandOrderId containsObject:order.identifier];
    }
    if(!lineItems){
        return 0;
    }
    if(!isExpend && lineItems.count >= 4){
        return 4;
    }
    return lineItems.count;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    bool isExpend = YES;
    BUYOrder *order = [self.dataList objectAtIndex:indexPath.section];
    if(order.identifier){
        isExpend = [self.expandOrderId containsObject:order.identifier];
    }
    NSInteger rowCount = [self getRowCountBySection:indexPath.section];
    NSInteger lastRow = rowCount -1;
    NSInteger firstRow = 0;
    CGFloat h = 165;
    CGFloat head = 45;
    CGFloat bot = 40;
    if(indexPath.row == 3 && !isExpend){
        return h - head;
    }
    if(indexPath.row == lastRow && rowCount >4){
        return h - head;
    }
    if(indexPath.row == firstRow){
        return h - bot;
    }
    return h - head -bot;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *indentifier = @"KWMOrderCell";
    bool isExpend = YES;
    KWMOrderCell *orderCell = [tableView dequeueReusableCellWithIdentifier:indentifier];
    if (!orderCell) {
        [tableView registerNib:[UINib nibWithNibName:indentifier bundle:nil] forCellReuseIdentifier:indentifier];
        orderCell = [tableView dequeueReusableCellWithIdentifier:indentifier];
    }
    //设置cell图片为默认图
    orderCell.ivImage.image = [UIImage imageNamed:@"ic_loading"];
    orderCell.markSection = indexPath.section;
    
    BUYOrder *order = [self.dataList objectAtIndex:indexPath.section];
    if(order.identifier){
        isExpend = [self.expandOrderId containsObject:order.identifier];
    }
    NSArray<BUYLineItem *> *arr = [order.lineItems array];
    if(!arr){
        return orderCell;
    }
    BUYLineItem *lineItem = [arr objectAtIndex:indexPath.row];
    orderCell.lineItem = lineItem;
    //当前section行数
    orderCell.lineCount = [self getRowCountBySection:indexPath.section];
    orderCell.order = [self.dataList objectAtIndex:indexPath.section];
    orderCell.markSection = indexPath.section;
    orderCell.imageUrl = [self getProductImage:lineItem.productId];
    [orderCell updateUI:indexPath.row productCount:arr.count showAll:isExpend];
    orderCell.delegate = self;
    return orderCell;
}

#pragma mark -- KWMOrderCellDelegate
-(void)kwm_onClickShowAllWith:(NSInteger)markSection And:(BOOL)showAll{
    BUYOrder *order = [self.dataList objectAtIndex:markSection];
    if(order.identifier){
        if (showAll) {
            [self.expandOrderId removeObject:order.identifier];
        }else{
            [self.expandOrderId addObject:order.identifier];
        }
    }
    [self.tbvOrder reloadData];
}

- (void)kwm_onClickProduct:(NSNumber *)productId{
    KWMNewProductVC *productDetailVC = [KWMNewProductVC getNewInstance];
    productDetailVC.productId = productId;
    [self.navigationController pushViewController:productDetailVC animated:YES];
}

-(void)kwm_onClickTrandsport:(BUYOrder *)order{
    
}

-(void)kwm_onClickCancelOrder:(BUYOrder *)order{
}



#pragma mark -- API
//获取全部订单API
- (void)requestNewOrderAPI{
    [self showLoading];
    __weak KWMOrderVC *weakSelf = self;
    NSInteger targetPage = self.currentPage.integerValue + 1;
    self.tbvOrder.mj_footer.hidden = YES;
    NSDictionary *parameters = @{
                               @"page":@(targetPage).stringValue
                               };
    [self.api getOrderList:parameters success:^(NSURLSessionDataTask *task, KWMOrderListResult *result) {
        [weakSelf hideLoading];
        if(!result.code || result.code.integerValue != 1000){
            if(result.message){
                [weakSelf showToast:result.message];
            }
            return;
        }
        if (result.data) {
            NSMutableArray *showOrders = [NSMutableArray arrayWithArray:result.data];
            BUYOrder *paidOrder = [self getPaidOrder];
            if(paidOrder && targetPage ==1){
                [showOrders insertObject:paidOrder atIndex:0];
            }
//            if(showOrders.count <= 50){
//                weakSelf.hasNextPage = false;
//                weakSelf.tbvOrder.mj_footer.hidden = YES;
//            }else{
//                weakSelf.hasNextPage = true;
//                weakSelf.tbvOrder.mj_footer.hidden = NO;
//            }
            if(targetPage == 1){
                [weakSelf.dataList removeAllObjects];
                [self.expandOrderId removeAllObjects];
            }
            [weakSelf refreshOpenSection:showOrders];
            [weakSelf appendDataList:showOrders setPage:targetPage];
            [weakSelf requestProductsApi];
        }
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        [weakSelf hideLoading];
        [weakSelf showError:error];
    }];
}


//获取订单API
- (void)requestOrderAPI{
//    [self showLoading];
    __weak KWMOrderVC *weakSelf = self;
    self.client.customerToken = [BUYCustomerToken customerTokenWithJSONDictionary:[[NSUserDefaults standardUserDefaults] objectForKey:@"token"]];
    
    [self.client getOrdersForCustomerCallback:^(NSArray<BUYOrder *> * _Nullable orders, NSError * _Nullable error) {
//        [weakSelf hideLoading];
//        NSMutableArray *showOrders = [NSMutableArray arrayWithArray:orders];
//        if (error == nil && orders != nil ) {
//            BUYOrder *paidOrder = [self getPaidOrder];
//            if(paidOrder){
//                [showOrders insertObject:paidOrder atIndex:0];
//            }
//            [weakSelf.dataList removeAllObjects];
//            [weakSelf refreshOpenSection:showOrders];
//            [weakSelf appendDataList:showOrders setPage:1];
//            weakSelf.hasNextPage = false;
//            [weakSelf requestProductsApi];
//        }else if (error != nil){
//            [weakSelf showError:error];
//        }
    }];
}

//获取订单商品列表,从而拿到图片(因为订单api返回的订单数据中没有商品图片数据)
-(void)requestProductsApi{
    if(!self.dataList){
        return;
    }
    NSMutableArray *productIds = [NSMutableArray array];
    for(BUYOrder *order in self.dataList){
        NSArray *lineItems = order.lineItemsArray;
        if(lineItems){
            for(BUYLineItem *lineItem in lineItems){
                //当该商品被删除后,productId有可能为空
                if(lineItem.productId && ![self isContainId:productIds productId:lineItem.productId]){
                    [productIds addObject:lineItem.productId];
                }
            }
        }
    }
    if(productIds.count == 0){
        return;
    }
    __weak KWMOrderVC *weakSelf = self;
    NSArray *productIdsArray = [KWMStringUtil splitArray:productIds withSubSize:50];
    for(NSArray *mProductIds in productIdsArray){
        //经过测试,该api一次最多返回50个product,所以如果有100个商品,需要分成两次请求
        [self.client getProductsByIds:mProductIds completion:^(NSArray<BUYProduct *> * _Nullable products, NSError * _Nullable error) {
            if (!error && products != nil && products.count>0) {
                [weakSelf.productList addObjectsFromArray:products];
                [weakSelf.tbvOrder reloadData];
            }else if (error != nil){
                [weakSelf showError:error];
            }
        }];
    }
}

-(void)requestCancelOrder:(NSNumber *)orderId{
    if(orderId == nil){
        return;
    }
    __weak KWMOrderVC *weakSelf = self;
    void(^failure)(NSURLSessionDataTask *,NSError *) = ^(NSURLSessionDataTask *task,NSError *error){
        [weakSelf hideLoading];
        [weakSelf showError:error];
    };
    void(^success)(NSURLSessionDataTask *,KWMCemaroseResult *) = ^(NSURLSessionDataTask *task,KWMCemaroseResult *result){
        [weakSelf hideLoading];
        if(result!=nil){
            [weakSelf hideLoading];
            [weakSelf requestOrderAPI];
        }
    };
    NSDictionary *parameters = @{
                                 @"reason":@"customer"
                                 };
    [self.api cancelOrder:parameters orderId:orderId success:success failure:failure];
    [self showLoading];
}

-(void)requestOrderStatus:(NSNumber *)orderId{
    [self showToast:@"正在获取订单状态"];
    if(orderId == nil){
        return;
    }
    __weak KWMOrderVC *weakSelf = self;
    void(^failure)(NSURLSessionDataTask *,NSError *) = ^(NSURLSessionDataTask *task,NSError *error){
        [weakSelf hideLoading];
        [weakSelf showToast:@"获取订单状态失败"];
    };
    void(^success)(NSURLSessionDataTask *,KWMOrdersResult *) = ^(NSURLSessionDataTask *task,KWMOrdersResult *result){
        [weakSelf hideLoading];
        if(result!=nil && result.orders!=nil && result.orders.count>0){
            KWMOrder *order = result.orders.firstObject;
            if(order.fulfillmentStatus){
                if([order.fulfillmentStatus isEqualToString:@"partial"]){
                    [weakSelf showToast:@"该订单已经配送,无法取消"];
                }else if([order.fulfillmentStatus isEqualToString:@"fulfilled"]){
                    [weakSelf showToast:@"该订单已经配送,无法取消"];
                }
            }else if(order.cancelReason){
                [weakSelf showToast:[NSString stringWithFormat:@"该订单已被取消,取消原因:%@",order.cancelReason]];
            }
            else if(order.closedAt){
                [weakSelf showToast:[NSString stringWithFormat:@"该订单已于%@被关闭",order.closedAt]];
            }else{
                UIAlertController *alertOne = [UIAlertController alertControllerWithTitle:@"提示" message:@"是否取消该订单" preferredStyle:UIAlertControllerStyleAlert];
                UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
                [alertOne addAction:cancel];
                UIAlertAction *certain = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
                    [self requestCancelOrder:orderId];
                }];
                [alertOne addAction:certain];
                [weakSelf presentViewController:alertOne animated:YES completion:nil];
            }
        }else{
            [weakSelf showToast:@"未查询到该订单"];
        }
    };
    [self.api getAdminOrder:nil orderId:orderId success:success failure:failure];
    [self showLoading];
}


@end