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

#import "GenerateOrdersViewController.h"
#import "GenerateOrdersTableViewCell.h"
#import "GenerateOrdersModifyTableViewCell.h"
#import "PersonInformationTableViewCell.h"
#import "CommodityListTableViewCell.h"
#import "AllpriceTableViewCell.h"
#import "AddaddressViewController.h"
#import "AppDelegate.h"
#import "OrderdetailsViewController.h"
#import "AddressViewController.h"
#import "AddressModel.h"
@interface GenerateOrdersViewController ()<UITableViewDelegate,UITableViewDataSource,delecteDelegate>


/**
 *  数据源
 */
@property (nonatomic,strong) NSMutableArray *datasArray;


@property (nonatomic,strong) UIView *Tabbarview;
@end

@implementation GenerateOrdersViewController

/**
 *  初始化数据源
 */
- (NSMutableArray *)datasArray
{
    if (_datasArray == nil) {
        
        _datasArray = [NSMutableArray array];
        for (int i=0; i<3; i++) {
            NSMutableArray *arr = [NSMutableArray array];
            [_datasArray addObject:arr];
        }
        //加入客户信息model
        Customermanager *customerModel = [Customermanager manager];
        [[_datasArray firstObject] addObject:customerModel];
        
        AddressModel *model = [[AddressModel alloc]init];
        model.name = @"地址占位";
        //地址占位
        [[_datasArray objectAtIndex_opple:1] addObject:model];
        //加入商品信息
        [_datasArray replaceObjectAtIndex:2 withObject:_settlementGoodsdatas];
    }
    
    return _datasArray;
}


#pragma mark -渲染完成
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    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 getAddressDatasRequest];
}

#pragma mark -UI
- (void)uiConfigAction
{
    self.generateOrderTableview.dataSource = self;
    self.generateOrderTableview.delegate = self;
    self.generateOrderTableview.tableFooterView = [UIView new];
    self.backShoppingbagsButton.layer.masksToBounds = YES;
    self.backShoppingbagsButton.layer.cornerRadius = kCornerRadius;
    self.createOrderButton.layer.masksToBounds = YES;
    self.createOrderButton.layer.cornerRadius = kCornerRadius;
}


#pragma mark -获得地址信息
- (void)getAddressDatasRequest
{
    [XBLoadingView showHUDViewWithDefault];
    WS(weakSelf);
    [HTTP networkWithDictionaryRequestWithURL:[NSString stringWithFormat:@"%@%@",SERVERREQUESTURL(SHIPPINGADDRESS),[Customermanager manager].model.fid]  withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
        
        [XBLoadingView hideHUDViewWithDefault];
        if (RESULT(returnValue)) {
            RsShippingAddrEntity *address = [[RsShippingAddrEntity alloc]initWithDictionary:RESPONSE(returnValue) error:nil];
            for (NSInteger i=address.list.count-1; i>=0; i--) {
                TOShippingAddrEntity *model = [address.list objectAtIndex_opple:i];
                //自定义model
                AddressModel *newmodel = [[AddressModel alloc]initWithDictionary:[model toDictionary] error:nil];
                [[weakSelf.datasArray objectAtIndex_opple:1]insertObject:newmodel atIndex:0];
            }
            //地址数组
            NSArray *addressArray = [weakSelf.datasArray objectAtIndex_opple:1];
            //增加cell
            NSMutableArray *addCellArray = [NSMutableArray array];
            for (int i=0; i<addressArray.count-1; i++) {
                NSIndexPath *indexpath = [NSIndexPath indexPathForRow:i inSection:1];
                [addCellArray addObject:indexpath];
            }
            [weakSelf.generateOrderTableview insertRowsAtIndexPaths:addCellArray withRowAnimation:UITableViewRowAnimationBottom];
        }
        else
        {
            [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
        }
    }withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    if (indexPath.section == 0 && indexPath.row == 0) {
        
        PersonInformationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"secondcell" forIndexPath:indexPath];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        return cell;
    }
    else if (indexPath.section == 1)
    {
        NSArray *Addressarr = [self.datasArray objectAtIndex_opple:indexPath.section];
        if (indexPath.row == Addressarr.count-1) {
            
            GenerateOrdersModifyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Modifycell" forIndexPath:indexPath];
            //增加地址或者修改
            [cell.addAddressButton addTarget:self action:@selector(AddAddressButtonClick) forControlEvents:UIControlEventTouchUpInside];
            [cell.changeButton addTarget:self action:@selector(ChangeButtonClick) forControlEvents:UIControlEventTouchUpInside];
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            cell.backgroundColor = RGB(242, 242, 242,1);
            return cell;
        }
        GenerateOrdersTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"consigneecell" forIndexPath:indexPath];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.backgroundColor = RGB(242, 242, 242,1);
        cell.indexNumber = indexPath.row;
        //回调
        __weak typeof(self) weakSelf = self;
        [cell setBlockSeletced:^(NSInteger index) {
            
            [weakSelf SetCustomerButtonClick:index];
        }];
        cell.NewModel = [self.datasArray objectAtIndex_opple:indexPath.section][indexPath.row];
        return cell;
    }
    NSArray *Addressarr = [self.datasArray objectAtIndex_opple:indexPath.section];
    if (indexPath.row == Addressarr.count-1) {
        
        AllpriceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"sixthcell" forIndexPath:indexPath];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.goodsAllprice = [self.datasArray objectAtIndex_opple:indexPath.section];
        return cell;
    }
    CommodityListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"fourthcell" forIndexPath:indexPath];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.model = [self.datasArray objectAtIndex_opple:indexPath.section][indexPath.row];
    return cell;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSArray *arr = [self.datasArray objectAtIndex_opple:section];
    return arr.count;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section) {
        case 0:
        {
            return 110;
        }
            break;
        case 1:
        {
            NSArray *arr = [self.datasArray objectAtIndex_opple:indexPath.section];
            if (indexPath.row == arr.count-1) {
                
                return 70;
            }
            return 56;
        }
            break;
        case 2:
        {
            NSArray *arr = [self.datasArray objectAtIndex_opple:indexPath.section];
            if (indexPath.row == arr.count-1) {
                
                return 50;
            }
            return 80;
        }
            break;
            
        default:
            break;
    }
    return 0;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    switch (section) {
        case 0:
        {
            return 0;
        }
            break;
        case 1:
        {
            return 5;
        }
            break;
        case 2:
        {
            return 44;
        }
            break;
            
        default:
            break;
    }
    return 0;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    switch (section) {
        case 1:
        {
            UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, 5)];
            imageView.image = TCImage(@"lineNew");
            UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, 44)];
            [view addSubview:imageView];
            return view;
        }
            break;
        case 2:
        {
            UILabel *titleLabe = [[UILabel alloc]initWithFrame:CGRectMake(50, 0, 100, 44)];
            titleLabe.text = @"购物袋清单";
            UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, 44)];
            [view addSubview:titleLabe];
            
            //横线
            UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(0, 43, ScreenWidth, 1)];
            lineView.backgroundColor = RGB(242, 242, 242,1);
            [view addSubview:lineView];
            return view;
        }
            break;
            
        default:
            break;
    }
    return nil;
}

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

#pragma mark -新增或者修改收货地址
- (void)CreateModifyShippingView:(AddressModel *)model Withindex:(NSInteger)cellindex
{
    AddressViewController *address = [[AddressViewController alloc]init];
    address.delegate = self;
    if (model != nil) {
        address.model = model;
        address.isChange = YES;
    }
    address.cellindex = cellindex;
    address.preferredContentSize = CGSizeMake(350, 350);
    address.modalPresentationStyle = UIModalPresentationFormSheet;
    UIPopoverPresentationController *pop = address.popoverPresentationController;
    pop.permittedArrowDirections = UIPopoverArrowDirectionAny;
    pop.sourceView = address.view;
    [self presentViewController:address animated:YES completion:nil];
}

#pragma mark -生成订单
- (IBAction)CreateOrderButtonClick:(UIButton *)sender {
    
    OrderBill *order = [[OrderBill alloc]init];
    //分页
    DataPage *page = [[DataPage alloc]init];
    page.page = ONE;
    order.datapage = page;
    //收货地址
    TOOrderEntity *orderReceiver = [[TOOrderEntity alloc]init];
    NSArray *Adressarr = [self.datasArray objectAtIndex_opple:1];
    //总价格
    CGFloat allPrice = ZERO;
    //总数量
    NSInteger allNumber = ZERO;
    for (int i=0; i<Adressarr.count; i++) {
        if ([[Adressarr objectAtIndex_opple:i] isKindOfClass:[AddressModel class]]) {
            AddressModel *model = [Adressarr objectAtIndex_opple:i];
            if (model.isSelected) {
                //收货人信息
                orderReceiver.receiverName = model.name;
                orderReceiver.orderTime = [[NSDate date] httpParameterString];
                orderReceiver.receiverMobile = model.miblephone;
                orderReceiver.receiverAddress = model.address;
                order.order = orderReceiver;
                orderReceiver.guideId = [[Shoppersmanager manager] shoppers].employee.fid;
                orderReceiver.consumerId = [Customermanager manager].model.fid;
                orderReceiver.orderState = @"001";
                //商品ID
                NSArray *goodArray = [self.datasArray lastObject];
                NSMutableArray *goodidArr = [NSMutableArray array];
                for (int i=0; i<goodArray.count-1; i++) {
                    ShopcarModel *model = [goodArray objectAtIndex_opple:i];
                    TOOrderdetailEntity *orderGoods = [[TOOrderdetailEntity alloc]init];
                    orderGoods.goodsId = model.goodsId;
                    orderGoods.goodsCover = model.goods.pictures;
                    orderGoods.goodsCode = model.goods.code;
                    orderGoods.goodsSpec = model.goods.spec;
                    orderGoods.goodsName = model.goods.name;
                    orderGoods.goodsBrand = model.goods.brandId;
                    orderGoods.goodsNum = [NSString stringWithFormat:@"%ld",(long)model.goodsNum];
                    orderGoods.goodsPrice = model.costPrice;
                    orderGoods.remark = model.goods.spec;
                    orderGoods.goodsUnit = model.goods.unit;
                    //总价
                    allPrice += model.goodsNum *[model.costPrice floatValue];
                    //总数量
                    allNumber += model.goodsNum;
                    orderGoods.goodsTotalPrice = [NSNumber numberWithFloat:model.goodsNum *[model.costPrice floatValue]];
                    [goodidArr addObject:orderGoods];
                }
                //总价
                orderReceiver.orderPrice = [NSNumber numberWithFloat:allPrice];
                orderReceiver.oldPrice = [NSNumber numberWithFloat:allPrice];
                //总数量
                orderReceiver.goodsNum = [NSString stringWithFormat:@"%ld",allNumber];
                order.orderdetailList = (NSArray<TOOrderdetailEntity> *)goodidArr;
                order.order.isSuccessSend = NO;
                order.order.province = [Customermanager manager].model.province;
                order.order.city = [Customermanager manager].model.city;
                order.order.country = [Customermanager manager].model.country;
                order.order.storeNumber = [Shoppersmanager manager].shoppers.storeCode;
                [XBLoadingView showHUDViewWithDefault];
                WS(weakSelf);
                [HTTP networkRequestWithURL:SERVERREQUESTURL(CREATEORDER)  withRequestType:ZERO withParameter:order withReturnValueBlock:^(id returnValue) {
                    [XBLoadingView hideHUDViewWithDefault];
                    if (RESULT(returnValue)) {
                        //商品购物车id
                        NSMutableArray *codeArrray = [NSMutableArray array];
                        for (ShopcarModel *model in _settlementGoodsdatas) {
                            [codeArrray addObject:model.fid?model.fid:@" "];
                        }
                        //调用删除购物车
                        if (weakSelf.DelecteSelectedGoods) {
                            weakSelf.DelecteSelectedGoods(codeArrray);
                        }
                        OrderdetailsViewController *orderDetails = [[[weakSelf class] getMainStoryboardClass] instantiateViewControllerWithIdentifier:@"orderdetails"];
                        orderDetails.orderCode = RESPONSE(returnValue);
                        orderDetails.isShowPayButton = YES;
                        orderDetails.isUserInteractionEnabled = YES;
                        orderDetails.isShowHeaderView = YES;
                        orderDetails.isSliding = YES;//取消滑动返回
                        [weakSelf.navigationController pushViewController:orderDetails animated:YES];
                        
                    }else
                    {
                        [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
                    }
                }withFailureBlock:^(NSError *error) {
                    [XBLoadingView hideHUDViewWithDefault];
                    [XBLoadingView showHUDViewWithText:error.localizedDescription];
                }];
                return;
            }
            else if (i == Adressarr.count -1)
            {
               [XBLoadingView showHUDViewWithText:@"未选中地址"];
            }
        }
    }
}


#pragma mark -返回购物车
- (IBAction)BackShoppingBagsButtonClick:(UIButton *)sender {
    [self.navigationController popViewControllerAnimated:YES];
}


#pragma mark -设置为当前地址回调
- (void)SetCustomerButtonClick:(NSInteger)index;
{
    for (UITableViewCell *cell in self.generateOrderTableview.visibleCells) {
        if ([cell isKindOfClass:[GenerateOrdersTableViewCell class]]) {
           GenerateOrdersTableViewCell *Newcell = (GenerateOrdersTableViewCell *)cell;
           Newcell.isSelectedButton.selected = NO;
        }
    }
    for (id objc in [self.datasArray objectAtIndex_opple:1]) {
        
        if ([objc isKindOfClass:[AddressModel class]]) {
            
            AddressModel *model = (AddressModel *)objc;
            model.isSelected = NO;
        }
    }
    AddressModel *model = [[self.datasArray objectAtIndex_opple:1] objectAtIndex_opple:index];
    model.isSelected = YES;
}



#pragma mark -修改地址
- (void)ChangeButtonClick
{
    NSArray *arr = [self.datasArray objectAtIndex_opple:1];
    for (int i=0; i<arr.count; i++) {
        
        AddressModel *model = [arr objectAtIndex_opple:i];
        if ([model isKindOfClass:[AddressModel class]]) {
            
            //判断是否为选中
            if (model.isSelected) {
                
                [self CreateModifyShippingView:[arr objectAtIndex_opple:i] Withindex:i];
                break;
            }else
            {
                if (i == arr.count-1) {
                    [XBLoadingView showHUDViewWithText:@"请先勾选一个地址"];
                }
            }
        }
    }
}


#pragma mark -新增地址
- (void)AddAddressButtonClick
{
    [self CreateModifyShippingView:nil Withindex:0];
}


#pragma mark -新增地址回调
- (void)addAddressCell:(AddressModel *)model
{
    [self dismissViewControllerAnimated:YES completion:nil];
    [[self.datasArray objectAtIndex_opple:1]insertObject:model atIndex:0];
    NSIndexPath *indexpath = [NSIndexPath indexPathForRow:0 inSection:1];
    [self.generateOrderTableview insertRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationLeft];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self.generateOrderTableview reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];
    });
}

#pragma mark -修改地址回调
- (void)changeAddresscell:(AddressModel *)model withcellindex:(NSInteger)cellindex
{
    [self dismissViewControllerAnimated:YES completion:nil];
    [[self.datasArray objectAtIndex_opple:1]replaceObjectAtIndex:cellindex withObject:model];
    NSIndexPath *indexpath = [NSIndexPath indexPathForRow:cellindex inSection:1];
    [self.generateOrderTableview reloadRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationLeft];
}

#pragma mark -删除地址
- (void)delecteCell:(NSString *)addressid
{
    [self dismissViewControllerAnimated:YES completion:nil];
    NSArray *arr = [self.datasArray objectAtIndex_opple:1];
    for (int i=0; i<arr.count; i++) {
        
        if ([[arr objectAtIndex_opple:i] isKindOfClass:[AddressModel class]]) {
            
            AddressModel *model = [arr objectAtIndex_opple:i];
            //判断是否为选中
            if ([model.fid isEqualToString:addressid]) {
                
                [[self.datasArray objectAtIndex_opple:1] removeObjectAtIndex:i];
                NSIndexPath *indexpath = [NSIndexPath indexPathForRow:i inSection:1];
                [self.generateOrderTableview deleteRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationLeft];
                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                    [self.generateOrderTableview reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];
                });
                break;
            }
        }
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
