//
//  NewTransportViewController.m
//  XFFruit
//
//  Created by 陈俊俊 on 15/9/6.
//  Copyright (c) 2015年 Xummer. All rights reserved.
//

#import "NewTransportViewController.h"
#import "TopTransportView.h"
#import "BottomTransportView.h"
#import "TransportPurchaseViewController.h"
#import "NewCostViewController.h"
#import "TransportPdtDetail.h"
#import "FeeAcountDetail.h"
#import "TransportViewController.h"
#import "ShopDetaileViewController.h"
#import "PurchaseBill.h"
#import "ProductStockModel.h"
NSInteger purchaseAddStockCheckNumber = 0;
typedef enum : NSUInteger {
    SaveTag = 7000,
    CommitTag,
} BtnTag;

#define TopHeight 328
#define BottomHeight 300
#define SpaceHeight 20
#define BottomViewHeight 60
@interface NewTransportViewController ()<TopTransportViewDelegate,UIScrollViewDelegate,UIAlertViewDelegate>
{
    UIScrollView *_scrollView;
    TopTransportView *_sheetView;
    BottomTransportView *_bottomView;
    id uuidObject;
    id billNumberObject;
    NSNumber *versionObject;
    id stateObject;
    
}
@property (nonatomic,strong)NSString *state;
/**
 *  用户选择的第一个商品的采购单
 */
@property (strong, nonatomic) PurchaseBill *firstBill;
/**
 *  缓存的选择的采购单数据
 */
@property (strong, nonatomic) NSMutableDictionary *dicProduct;
@end

@implementation NewTransportViewController
- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (instancetype)init{
    self = [super init];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(choseTransportPurchase) name:KNOTIFICATION_ChoseTransportPurchase object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addTransportCost:) name:KNOTIFICATION_AddTransportCost object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addPurchaseProduct:) name:KNOTIFICATION_AddPurchaseProduct object:nil];
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    //布局
    [self bulidLayout];
    uuidObject = [NSNull null];
    billNumberObject = [NSNull null];
    versionObject = [NSNumber numberWithInteger:0];
    stateObject = [NSNull null];
    if (self.transport) {
        [self getDataFromServer];
    }
}

- (void)getDataFromServer{
    __weak typeof(self)weakSelf = self;
    void(^succ)(id) = ^(id data) {
        [IBTLoadingView hideHUDWithText:nil];
        __strong __typeof(weakSelf)strongSelf = weakSelf;
        if (data) {
            NSInteger success = [data[@"success"] integerValue];
            NSString *message  = data[@"message"] ;
            if (success == 1) {
                NSDictionary *dictData = data[@"data"];
                Transport *transport = [[Transport alloc]init];
                [transport setValuesForKeysWithDictionary:dictData];
                self.transport = transport;
                [strongSelf fetchtTransportDetail];
            }else{
                [IBTLoadingView showTips:message];
            }
        }else{
            [IBTLoadingView showTips:@"     无记录     "];
        }
    };
    void(^fail)(id) = ^(id data) {
        [IBTLoadingView hideHUDWithText:nil];
        [IBTLoadingView showTips:data];
    };
    [IBTLoadingView showProgressLabel:@"正在加载..."];
    [[ICRHTTPController sharedController] getTransportResultWithTransportUuid:self.transport.uuid success:succ failure:fail];
}

- (void)fetchtTransportDetail
{
    _sheetView.transport = self.transport;
    [_bottomView refreshCost:self.transport.accountDetails];
    [_bottomView refreshTranProduct:self.transport.pdtDetails];
    
    //清空缓存，重新
    [self.dicProduct removeAllObjects];
    for (TransportPdtDetail *pdtDetail in _bottomView.productVC.transportProductArr) {
        NSMutableArray *arrProduct = [self.dicProduct objectForKey:pdtDetail.purchasebillnumber];
        if (!arrProduct) {
            arrProduct = [NSMutableArray array];
            [self.dicProduct setObject:arrProduct forKey:pdtDetail.purchasebillnumber];
        }
        
        [arrProduct addObject:pdtDetail];
    }
}

- (void)bulidLayout{
    self.view.backgroundColor  = XXFBgColor;
    _scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,0, ScreenSize.width, ScreenSize.height- 64 - BottomViewHeight )];
    _scrollView.showsHorizontalScrollIndicator  = NO;
    _scrollView.showsVerticalScrollIndicator = NO;
    _scrollView.contentSize = CGSizeMake(ScreenSize.width, TopHeight+ BottomHeight + SpaceHeight*2);
    [self.view addSubview:_scrollView];
    
    
    UIView *footView = [[UIView alloc]initWithFrame:CGRectMake(0, ScreenSize.height - BottomViewHeight - 64, ScreenSize.width, BottomViewHeight)];
    UIButton *saveBtn =  [IBTCustomButtom creatButtonWithFrame:CGRectMake(15, 8, (ScreenSize.width - 15*3)/2, 44) target:self sel:@selector(btnClick:) tag:SaveTag image:nil title:@"保存" titleColor: [UIColor whiteColor] isCorner:YES corner:5 bgColor:GXF_SAVE_COLOR];
    [footView addSubview:saveBtn];
    
    UIButton *commitBtn = [IBTCustomButtom creatButtonWithFrame:CGRectMake(CGRectGetMaxX(saveBtn.frame) + 15, 8, (ScreenSize.width - 15*3)/2, 44) target:self sel:@selector(btnClick:) tag:CommitTag image:nil title:@"提交" titleColor: [UIColor whiteColor] isCorner:YES corner:5 bgColor:GXF_COMMIT_COLOR];
    [footView addSubview:commitBtn];
    
    [self.view addSubview:footView];
    
    _sheetView = [[TopTransportView alloc]initWithFrame:CGRectMake(0, 0, ScreenSize.width, TopHeight)];
    _sheetView.delegate = self;
    [_scrollView addSubview:_sheetView];
    
    _bottomView = [[BottomTransportView alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(_sheetView.frame) + 20, ScreenSize.width,BottomHeight) withHidden:NO];
    _bottomView.backgroundColor = [UIColor whiteColor];
    [_scrollView addSubview:_bottomView];
}
- (void)btnClick:(UIButton *)btn{
    switch (btn.tag) {
        case SaveTag:
        {
            if ([self checkTransport]) {
                self.state = TRANSFER_STATE_INITIAL;
                [self getDataFromServer:TRANSPORT_STATE_INITIAL msg:@"正在保存..."];
            }
        }
            break;
        case CommitTag:{
            if ([self checkTransport]) {
                
                
                NSArray *array = self.dicProduct.allKeys;
                __weak NewTransportViewController *weakSelf = self;
                //判断数量问题
                [IBTLoadingView showProgressLabel:@""];
                [self stockValidWithDic:self.dicProduct billNumbers:array complete:^{
                    [IBTLoadingView hideHUDWithText:@""];
                    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"请确认提交" delegate:weakSelf cancelButtonTitle:@"取消" otherButtonTitles:@"确认", nil];
                    alertView.delegate = weakSelf;
                    [alertView show];
                    
                }];
            }
        }
            break;
        default:
            break;
    }
}

- (void)stockValidWithDic:(NSMutableDictionary *)dic billNumbers:(NSArray *)billNumbers complete:(void (^)(void))complete {
    //如果billNumbers数量为0，说明没有去选择
    
    NSString *billNum = billNumbers[purchaseAddStockCheckNumber];
    NSMutableArray *arrProducts = [dic objectForKey:billNum];
    __weak NewTransportViewController *weakSelf = self;
    [HTTP purchaseStockWithPurchaseUuid:billNum success:^(id succ) {
        if (![succ[@"data"] isKindOfClass:[NSArray class]]) {
                                [IBTLoadingView hideHUDWithText:@""];
            NSString *msg = [NSString stringWithFormat:@"该批次<%@>在总部系统的库存不足！", billNum];
            ShowMessage(msg);
            return ;
        }
        
        for (NSDictionary *dict in succ[@"data"]) {
            ProductStockModel *model = [ProductStockModel new];
            [model setValuesForKeysWithDictionary:dict];
            for (TransportPdtDetail *detail in arrProducts) {
                if ([detail.productCode isEqualToString:model.productCode]) {
                    
                    if (detail.baseQty.floatValue > model.qty.floatValue) {
                        CLog(@"库存不足");
                        [IBTLoadingView hideHUDWithText:@""];
                        purchaseAddStockCheckNumber = 0;
                        NSString *msg = [NSString stringWithFormat:@"该批次<%@>的商品%@在总部系统的库存不足！", billNum, detail.productName];
                        ShowMessage(msg);
                        return ;
                    }
                }
            }
        }
        
        purchaseAddStockCheckNumber += 1;
        if (purchaseAddStockCheckNumber == billNumbers.count) {
            purchaseAddStockCheckNumber = 0;
            complete();
        }else{
            [weakSelf stockValidWithDic:dic billNumbers:billNumbers complete:complete];
        }
        
    } failure:^(id fail) {
                            [IBTLoadingView hideHUDWithText:@""];
        purchaseAddStockCheckNumber = 0;
    }];
}


- (void)getDataFromServer:(NSString *)state msg:(NSString *)msg{
    //保存
    void(^succ)(id) = ^(id data) {
        [IBTLoadingView hideHUDWithText:nil];
        if (data) {
            NSInteger success = [data[@"success"] integerValue];
            NSString *message = data[@"message"];
            if (success == 1) {
                //成功
                if ([state isEqualToString:PURCHASE_STATE_INITIAL]) {//保存成功
                    NSString *uuidS = data[@"data"][@"uuid"];
                    NSString *billNumberS = data[@"data"][@"billNumber"];
                    NSNumber *versionN = data[@"data"][@"version"];
                    uuidObject = uuidS;
                    billNumberObject = billNumberS;
                    versionObject = versionN;
                    [IBTLoadingView showTips:[NSString stringWithFormat:@"当前单据%@已保存成功",billNumberS]];
                }else{//提交成功
                    TransportViewController *svc = [TransportViewController new];
                    svc.title = @"发运单列表";
                    [self PushViewController:svc animated:YES];
                }
            }else{
                [IBTLoadingView showTips:message];
            }
        }
    };
    void(^fail)(id) = ^(id data) {
        [IBTLoadingView hideHUDWithText:nil];
        [IBTLoadingView showTips:data];
    };
    
    if(self.transport.uuid.length > 0 && uuidObject == [NSNull null]){
        uuidObject = self.transport.uuid;
    }
    if (self.transport.billnumber > 0 && billNumberObject == [NSNull null]) {
        billNumberObject = self.transport.billnumber;
    }
    if (self.transport.state > 0 && stateObject == [NSNull null]) {
        stateObject = self.transport.state;
    }else{
        stateObject = state;
    }
    if (self.transport && [versionObject integerValue] == 0) {
        versionObject = self.transport.version;
    }
    NSMutableArray *billProducts = [NSMutableArray array];
    for (TransportPdtDetail *pdtDetail in _bottomView.productVC.transportProductArr) {
        [billProducts  addObject:[pdtDetail dictForCommit]];
    }
    NSMutableArray *costs = [NSMutableArray array];
    for (FeeAcountDetail *fee in _bottomView.costVC.costArr) {
        [costs  addObject:[fee dictForCommit]];
    }
    
    //获取到期时间
    NSString *dateString = [[NSDate date] httpParameterString];
    NSDateFormatter *f = [NSDateFormatter new];
    [f setDateFormat:@"yyy-MM-dd HH:ss:mm"];
    NSDate *date = [f dateFromString:dateString];
    NSDate *new = [NSDate dateWithTimeInterval:60 * 60 * 24 * 5 sinceDate:date];
    NSString *expiredTime = [f stringFromDate:new];
    
    NSDictionary *dict = @{@"uuid":uuidObject,
                           @"version":versionObject,
                           @"billnumber":billNumberObject,
                           @"enterprise":[ICRUserUtil sharedInstance].orgId,
                           @"state":stateObject,
                           @"expiredDate":expiredTime,
                           @"warehouseUuid":[IBTCommon checkString:_sheetView.warehouseUuid],
                           @"warehouseCode":[IBTCommon checkString:_sheetView.warehouseCode],
                           @"warehouseName":[IBTCommon checkString:_sheetView.warehouseName],
                           @"rwarehouseUuid":[IBTCommon checkString:_sheetView.rwarehouseUuid],
                           @"rwarehouseCode":[IBTCommon checkString:_sheetView.rwarehouseCode],
                           @"rwarehouseName":[IBTCommon checkString:_sheetView.rwarehouseName],
                           @"carnumber":[IBTCommon checkString:_sheetView.carnumber],
                           @"type":[IBTCommon checkString:_sheetView.type],
                           @"carphone":[IBTCommon checkString:_sheetView.carphone],
                           @"arriveDate":[IBTCommon checkString:_sheetView.arriveDate],
                           @"note":[IBTCommon checkString:_sheetView.note],
                           @"pdtDetails":billProducts,
                           @"accountDetails":costs};
    [IBTLoadingView showProgressLabel:msg];
    if ([state isEqualToString:TRANSFER_STATE_INITIAL]) {
         [[ICRHTTPController sharedController] saveTransportWithData:dict success:succ failure:fail];
    }else{
         [[ICRHTTPController sharedController] saveAndSubmitTransportWithData:dict success:succ failure:fail];
    }
   
}



- (BOOL)checkTransport{
    _sheetView.note = _sheetView.remarkTextView.text;
    _sheetView.carnumber = _sheetView.carTextFiled.text;
    _sheetView.carphone = _sheetView.phoneTextFiled.text;

    if (_sheetView.warehouseName.length == 0 ) {
        ShowMessage(@"发货仓库不能为空");
        return NO;
    }
    if (_sheetView.rwarehouseUuid.length == 0 ) {
        ShowMessage(@"收货仓库不能为空");
        return NO;
    }
    
    if (_sheetView.type.length == 0 ) {
        ShowMessage(@"运输类型不能为空");
        return NO;
    }
    if (_sheetView.carnumber.length == 0) {
        ShowMessage(@"车牌号不能为空");
        return NO;
    }
    if (_sheetView.carphone.length == 0) {
        ShowMessage(@"司机电话不能为空");
        return NO;
    }
    if (_sheetView.arriveDate.length  == 0) {
        ShowMessage(@"预计到货时间不能为空");
        return NO;
    }
    
    if (_bottomView.productVC.transportProductArr.count == 0) {
        ShowMessage(@"商品不能为空");
        return NO;
    }
    if (_bottomView.costVC.costArr.count == 0) {
        ShowMessage(@"费用不能为空");
        return NO;
    }

    for (TransportPdtDetail *billProduct in _bottomView.productVC.transportProductArr) {
        if ([billProduct.qty floatValue] <= 0 || [billProduct.baseQty floatValue] <= 0) {
            ShowMessage(@"有数量等于0的商品明细，请编辑后保存");
            return NO;
        }
//        if ([billProduct.price floatValue] <=0 || [billProduct.packprice floatValue] <= 0) {
//            ShowMessage(@"有价格未填写的商品明细，请编辑后保存");
//            return NO;
//        }
    }
    // 校验手机号码
    if (![RegexUtil isValidatePhone:_sheetView.carphone] || ![RegexUtil isValidatePhoneNew:_sheetView.carphone]){
        ShowMessage(@"手机号格式不正确");
        return NO;
    }

    return YES;
}

- (void)setFirstBill:(PurchaseBill *)firstBill {
    _firstBill = firstBill;
    /**
     *  @property (nonatomic,strong)NSString *receiveWrh_uuid;//收货uuid
     @property (nonatomic,strong)NSString *receiveWrh_code;//收货代码
     @property (nonatomic,strong)NSString *receiveWrh_name;//收货姓名
     *
     */
    _sheetView.warehouseCode = firstBill.receiveWrh_code;
    _sheetView.warehouseName = firstBill.receiveWrh_name;
    _sheetView.warehouseUuid = firstBill.receiveWrh_uuid;
    _sheetView.warehouseLabel.text = [NSString stringWithFormat:@"%@[%@]",_sheetView.warehouseName,_sheetView.warehouseCode];
    _sheetView.warehouseLabel.textColor = GXF_CONTENT_COLOR;
}


- (void)choseTransportPurchase{
    __weak NewTransportViewController *weakSelf = self;
    TransportPurchaseViewController *tpv = [TransportPurchaseViewController new];
    tpv.isTransportIn = YES;
    tpv.getProchaseProduct = ^(NSArray *products){
        if (products.count > 0) {
            [_bottomView reProduct:products];
        }
    };
    
    tpv.blockFirstWarehouse = ^(NSArray *bills){
        if (bills.count > 0) {
            weakSelf.firstBill = bills[0];
        }
    };
    
    tpv.dicProduct = self.dicProduct;
    
    [self PushViewController:tpv animated:YES];
}


- (void)addTransportCost:(NSNotification *)fination{
    
    NewCostViewController *nvc = [NewCostViewController new];
    NSIndexPath *indexPath = [[fination userInfo] objectForKey:@"indexPath"];
    FeeAcountDetail *fee = [[fination userInfo] objectForKey:@"feeAccountDetail"];

    if (indexPath) {
        nvc.navTitle = @"编辑费用";
        nvc.indexPath = indexPath;
        nvc.accountDetail = fee;
    }else{
        nvc.navTitle = @"添加费用";
    }
    nvc.getTransportCost = ^(FeeAcountDetail *fee,NSIndexPath *indexPath){
        if (fee) {
            [_bottomView refreshCost:fee indexPath:indexPath];
        }
    };
    nvc.deleteTransportCost = ^(FeeAcountDetail *fee,NSIndexPath *indexPath){
        if (fee) {
            [_bottomView refreshDelCost:fee indexPath:indexPath];
        }
    };
    [self PushViewController:nvc animated:YES];

}
- (void)addPurchaseProduct:(NSNotification *)fication{
    TransportPdtDetail *billProduct = [[fication userInfo] objectForKey:@"transportPdtDetail"];
    NSInteger indexTag = [[[fication userInfo] objectForKey:@"indexTag"] integerValue];
    
    ShopDetaileViewController *svc = [[ShopDetaileViewController alloc] init];
    if (billProduct) {
        svc.intertype = ShopDetailInterTypeTransport;
        svc.navTitle = @"编辑商品";
        ShopDetail *shopDetail=[self coverShopDetail:billProduct];
        shopDetail.IsXiuGai=YES;
        svc.choseShopDetail = ^(ShopDetail *Detail){
            TransportPdtDetail *tdetail = [self coverTransportPdtDetail:Detail];
            if (Detail.IsDeleted) {
                [_bottomView refreshDelProduct:tdetail tag:indexTag];
                //清空缓存，重新
                [self.dicProduct removeAllObjects];
                for (TransportPdtDetail *pdtDetail in _bottomView.productVC.transportProductArr) {
                    NSMutableArray *arrProduct = [self.dicProduct objectForKey:pdtDetail.purchasebillnumber];
                    if (!arrProduct) {
                        arrProduct = [NSMutableArray array];
                        [self.dicProduct setObject:arrProduct forKey:pdtDetail.purchasebillnumber];
                    }
                    
                    [arrProduct addObject:pdtDetail];
                }
            }else{
                [_bottomView refreshEditProduct:tdetail tag:indexTag];
            }
        };
        svc.shopDetail=shopDetail;
    }else{
        svc.navTitle = @"添加商品";
        // 回调
        svc.choseShopDetail = ^(ShopDetail *shopDetail){
            TransportPdtDetail *tdetail = [self coverTransportPdtDetail:shopDetail];
            [_bottomView refreshProduct:tdetail];
        };
    }
    [self PushViewController:svc animated:YES];
}


- (TransportPdtDetail *)coverTransportPdtDetail:(ShopDetail *)shopDetail{
    TransportPdtDetail *billProduct = [[TransportPdtDetail alloc]init];
    billProduct.uuid = shopDetail.uuid;
    billProduct.productUuid = shopDetail.product_uuid;
    billProduct.productCode = shopDetail.product_code;
    billProduct.productName = shopDetail.merchandise;
    billProduct.qpc = [NSNumber numberWithFloat:[shopDetail.packageSpecification floatValue]];
    billProduct.unit = shopDetail.packageUnit;
    billProduct.qty = [NSNumber numberWithFloat:[shopDetail.packageQuantity floatValue]];
    billProduct.packprice = [NSNumber numberWithFloat:[shopDetail.packageUnitPrice floatValue]];
    billProduct.price = [NSNumber numberWithFloat:[shopDetail.foundationUnitPrice floatValue]];
    billProduct.baseQty = [NSNumber numberWithFloat:[shopDetail.foundationQuantity floatValue]];
    billProduct.total = [NSNumber numberWithFloat:[shopDetail.totalMoney floatValue]];
    billProduct.note = shopDetail.remark;
    billProduct.qpcStr = shopDetail.packageQpcStr ? shopDetail.packageQpcStr : @"无" ;
    billProduct.baseUnit = shopDetail.packageQpcUnit;
    billProduct.purchasebillnumber = shopDetail.sourceBillNumber;
    billProduct.purchasePdtDetail = shopDetail.sourceDetail;
    return billProduct;
}
- (ShopDetail *)coverShopDetail:(TransportPdtDetail *)billProduct{
    ShopDetail *shopDetail = [[ShopDetail alloc]init];
    shopDetail.uuid = billProduct.uuid;
    shopDetail.product_uuid = billProduct.productUuid;
    shopDetail.product_code = billProduct.productCode;
    shopDetail.merchandise  = billProduct.productName;
    shopDetail.packageSpecification  =  [billProduct.qpc stringValue];
    shopDetail.packageUnit = billProduct.unit;
    shopDetail.packageQuantity = [billProduct.qty stringValue];
    shopDetail.packageUnitPrice  = billProduct.packprice;
    shopDetail.foundationUnitPrice= billProduct.price;
    shopDetail.foundationQuantity= [billProduct.baseQty  stringValue];
    shopDetail.totalMoney= billProduct.total;
    shopDetail.remark  = billProduct.note;
    shopDetail.sourceDetail = billProduct.purchasePdtDetail;
    shopDetail.sourceBillNumber = billProduct.purchasebillnumber;
    return shopDetail;
    
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex == 1) {
        //提交
        self.state = TRANSPORT_STATE_RECEIVED;
        [self getDataFromServer:TRANSPORT_STATE_RECEIVED msg:@"正在提交..."];
    }
}

#pragma mark - TopPurchaseViewDelegate

- (void)pushNextViewController:(id)vc{
    [self PushViewController:vc animated:YES];
}
#pragma mark - 协议方法
- (void)hiddenKeyBoard{
    [self keyboardHidden];
}
- (void)keyboardHidden{
    [_sheetView.phoneTextFiled resignFirstResponder];
    [_sheetView.carTextFiled resignFirstResponder];
    [_sheetView.remarkTextView resignFirstResponder];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    if(self.transport && [self.state isEqualToString:TRANSPORT_STATE_INITIAL]){
        [ICRUserUtil sharedInstance].needFresh = YES;
    }
    if (_sheetView.startTimeView) {
        [_sheetView.startTimeView removeFromSuperview];
        _sheetView.startTimeView = nil;
    }
}

- (NSMutableDictionary *)dicProduct {
    if (!_dicProduct) {
        _dicProduct = [NSMutableDictionary dictionary];
    }
    return _dicProduct;
}

/*
#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
