//
//  KWMProductDetailVC.m
//  iCemarose
//
//  Created by HouWeiBin on 2017/1/11.
//  Copyright © 2017年 kollway. All rights reserved.
//

#import "KWMProductDetailVC.h"
#import "KWMProductDetailView.h"
#import "KWMBottomView.h"
#import "KWMUserModel.h"
#import "PhotoBroswerVC.h"
#import "KWMStringUtil.h"
#import "KWMShopCartData.h"
#import "KWMInformationVC.h"
#import "KWMBrandCaramelVC.h"
#import "KWMSelectSizeVC.h"
#import "KWMShopCartVC.h"
#import "KWMBeforePayVC.h"
#import "KWMLoginVC.h"
#import "MZFormSheetPresentationViewController.h"
#import "KWMShareVC.h"
#import "KWMImageUtil.h"
#import "KWMShoppingCart.h"
#import <RegexKitLite/RegexKitLite.h>
#import <TOWebViewController/TOWebViewController.h>
#import <AFNetworking/AFNetworking.h>
#import <TOWebViewController/NJKWebViewProgress.h>
#import <PPNetworkHelper/PPNetworkHelper.h>


@interface KWMProductDetailVC ()<KWMBottomViewDelegate,KWMProductDetailViewDelegate,KWMSelectSizeVCDelegate,UIScrollViewDelegate>

@property (weak, nonatomic) IBOutlet UIScrollView *svContent;

@property (nonatomic) KWMProductDetailView *productDetailView;

@property (nonatomic) KWMBottomView *recommendView;

@property (nonatomic) BUYCollection *collectionSameType;

@property (nonatomic) BUYCollection *collectionSameBrand;

@property (nonatomic) NSString *typeTag;

@property (weak, nonatomic) IBOutlet UIButton *btnShopCart;

@property (weak, nonatomic) IBOutlet UIButton *btnShare;

- (IBAction)onClickBackBtn:(id)sender;

- (IBAction)onClickShopCartBtn:(id)sender;

- (IBAction)onClickShare:(id)sender;

@end

@implementation KWMProductDetailVC

- (void)viewDidLoad {
    [super viewDidLoad];
    [self initScrollView];
    [self initRecommendProduct];
//    [self initShopCartCount];
    //刷新product,如果是缓存的product,因为没有字典,所以会发生错误,需要重新请求一个有字典的product
    if(self.product && self.product.identifier && !self.product.JSONDictionary){
        [self getProductBy:nil product:self.product];
    }
    NSArray *types = @[@"baby",@"girls",@"boys",@"shoes",@"newborn"];
    for (NSString *tag in self.product.tags) {
        if ([types containsObject:tag.lowercaseString]) {
            self.typeTag = tag.lowercaseString;
            break;
        }
    }
    if (!self.typeTag) {
        self.productDetailView.sizeGuide.hidden = YES;
    }
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

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

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

- (void)initScrollView{
    CGFloat w = UI_SCREEN_WIDTH;
    CGFloat h = UI_SCREEN_HEITHT-60;
    for (int i = 0;i < 2;i++){
        if(i ==  0){
            self.productDetailView = [[KWMProductDetailView alloc] init];
            self.productDetailView.frame = CGRectMake(i*w, 0, w, h);
            self.productDetailView.delegate = self;
            [self.svContent addSubview:self.productDetailView];
            [self.productDetailView setData:self.product];
        }else{
            self.recommendView = [[KWMBottomView alloc] init];
            self.recommendView.frame = CGRectMake(i*w, 0, w, h);
            self.recommendView.delegate = self;
            [self.svContent addSubview:self.recommendView];
        }
    }
    self.svContent.delegate = self;
    self.svContent.contentSize = CGSizeMake(w*2,0);
    self.svContent.pagingEnabled = YES;
    if(self.product && self.product.imagesArray && self.product.imagesArray.count>0){
        NSInteger imageCount = self.product.imagesArray.count;
        [self.recommendView setCount:imageCount];
    }
}

- (void)kwm_onClickSizeGuide {
    
    NSString *brand = [self.product.vendor stringByReplacingOccurrencesOfRegex:@"\\s*\\W\\s*" withString:@"-"].lowercaseString;
    NSString *baseUrl = @"http://www.cemarose.cn/pages/";
    NSString *url= [NSString stringWithFormat:@"%@%@-size-guide-%@",baseUrl,brand,self.typeTag];
    NSLog(@"size guide url: %@",url);
//    TOWebViewController *wv = [[TOWebViewController alloc] initWithURLString:url];
    TOWebViewController *wv = [[TOWebViewController alloc] init];
    __unused id _ = wv.view;
    wv.showPageTitles = NO;
    wv.title = @"Size Guide";
    wv.navigationButtonsHidden = YES;
//    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
////    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
//    [manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
////        NJKWebViewProgress *wvp = [vc valueForKeyPath:@"progressManager"];
////        [wvp.progressDelegate webViewProgress:wvp updateProgress:downloadProgress.fractionCompleted];
//    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
//        NSString *body = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
//        body = [body stringByReplacingOccurrencesOfRegex:@"<meta[\\w\\W]*?/?>" withString:@""];
//        body = [body stringByReplacingOccurrencesOfRegex:@"<script[\\w\\W]*?</script>" withString:@""];
//        body = [body stringByReplacingOccurrencesOfRegex:@"<header[\\w\\W]*?</header>" withString:@""];
//        body = [body stringByReplacingOccurrencesOfRegex:@"<footer[\\w\\W]*?</footer>" withString:@""];
//        body = [body stringByReplacingOccurrencesOfRegex:@"<head>" withString:@"<head><meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" /><style type='text/css'>"
//                @".page-title h1.label{font-size:17px;}"
//                @".rte.text-content td{padding-left:10px;}"
//                @"</style>"];
//        [wv.webView loadHTMLString:body baseURL:[NSURL URLWithString:baseUrl]];
//    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//    }];
    void(^success)(id) = ^(id body){
        if (!body) {
            return;
        }
        body = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
        body = [body stringByReplacingOccurrencesOfRegex:@"<meta[\\w\\W]*?/?>" withString:@""];
        body = [body stringByReplacingOccurrencesOfRegex:@"<script[\\w\\W]*?</script>" withString:@""];
        body = [body stringByReplacingOccurrencesOfRegex:@"<header[\\w\\W]*?</header>" withString:@""];
        body = [body stringByReplacingOccurrencesOfRegex:@"<footer[\\w\\W]*?</footer>" withString:@""];
        body = [body stringByReplacingOccurrencesOfRegex:@"<head>" withString:@"<head><meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" /><style type='text/css'>"
                @".page-title h1.label{font-size:17px;}"
                @".rte.text-content td{padding-left:10px;}"
                @"</style>"];
        [wv.webView loadHTMLString:body baseURL:[NSURL URLWithString:baseUrl]];
        
    };
    
    __weak typeof(self) this = self;
    [PPNetworkHelper setAFHTTPSessionManagerProperty:^(AFHTTPSessionManager *sessionManager) {
        sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
        sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
    }];
    [PPNetworkHelper GET:url parameters:nil responseCache:success success:success failure:^(NSError *error) {
        [this showError:error];
    }];
    [self.navigationController pushViewController:wv animated:YES];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(200 * NSEC_PER_MSEC)), dispatch_get_main_queue(), ^{
        NJKWebViewProgress *wvp = [wv valueForKeyPath:@"progressManager"];
        [wvp.progressDelegate webViewProgress:wvp updateProgress:0.1];
    });
    
    
}

-(void)onClickBackBtn:(id)sender{
    [self.navigationController popViewControllerAnimated:YES];
}

-(void)onClickShopCartBtn:(id)sender{
    KWMShopCartVC *shopCartVC = (KWMShopCartVC *)[KWMBaseVC findControllerBy:[KWMShopCartVC kwmTag] fromStoryboard:@"ShopCart"];
    [self.navigationController pushViewController:shopCartVC animated:YES];
}

-(void)onClickShare:(id)sender{
    if(!self.product){
        return;
    }
    KWMShareVC *shareVC = (KWMShareVC *)[KWMBaseVC findControllerBy:[KWMShareVC kwmTag] fromStoryboard:@"New"];
    CGSize size = [UIScreen mainScreen].bounds.size;
    [self showPresentation:shareVC size:size tapOutsideClose:YES style:MZFormSheetPresentationTransitionStyleFade];
    shareVC.shareUrl = [NSString stringWithFormat:@"https://www.cemarose.com/products/%@",self.product.handle];
    shareVC.imageUrl = [KWMImageUtil getProductImageUrl:self.product ImageSize:SmallImage];
    shareVC.productName = self.product.title;
}

- (void)initShopCartCount{
    NSNumber *count = [[KWMShoppingCart sharedInstance] count];
    [self.btnShopCart setTitle:count.stringValue forState:UIControlStateNormal];
}

- (void)setProductId:(NSNumber *)productId{
    _productId = productId;
    [self getProductBy:self.productId product:nil];
}

//KWMProductDetailViewDelegate
-(void)kwm_onClickImage:(NSMutableArray *)imageArr currentIndex:(NSInteger)currentIndex{
    //避免循环引用
    __weak KWMProductDetailVC *weakSelf=self;
    NSArray<NSString *> *imags = imageArr;
    [PhotoBroswerVC show:self type:PhotoBroswerVCTypePush index:currentIndex isShowSaveBtn:YES photoModelBlock:^NSArray *{
        NSArray *localImages = imags;
        NSMutableArray *modelsM = [NSMutableArray arrayWithCapacity:localImages.count];
        for (NSUInteger i = 0; i< localImages.count; i++) {
            PhotoModel *pbModel=[[PhotoModel alloc] init];
            pbModel.mid = i + 1;
            //源frame
            UIImageView *imageV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height)];
            pbModel.sourceImageView = imageV;
            pbModel.image_HD_U = [[KWMAPIManager sharedManager] toAbsoluteUrl:localImages[i]];
            [modelsM addObject:pbModel];
        }
        return modelsM;
    }];
}

-(void)kwm_onClickInformation{
    KWMInformationVC *informationVC = (KWMInformationVC *)[KWMBaseVC findControllerBy:[KWMInformationVC kwmTag] fromStoryboard:@"Main"];
    informationVC.inforStr = NSLocalizedString(@"getAndReturnGoods",@"getAndReturnGoods");
    informationVC.inforTitleStr = NSLocalizedString(@"getAndReturnGoodsTitle",@"getAndReturnGoodsTitle");
    informationVC.titleStr = @"发货与退货";
    [self.navigationController pushViewController:informationVC animated:YES];
}

-(void)kwm_onClickSizeBtn{
    KWMSelectSizeVC *editVC = (KWMSelectSizeVC *)[KWMBaseVC findControllerBy:[KWMSelectSizeVC kwmTag] fromStoryboard:@"ShopCart"];
    editVC.delegate = self;
    editVC.product = self.product;
    
//    NSDictionary *shopCartDict = self.product.JSONDictionary;
    editVC.view.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0];
    editVC.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    editVC.providesPresentationContextTransitionStyle = YES;
    editVC.definesPresentationContext = YES;
    [self presentViewController:editVC animated:YES completion:nil];
}

-(void)kwm_goToBrandVC{
    if(self.product && self.product.vendor){
        KWMBrandCaramelVC *brandCaramelVC = (KWMBrandCaramelVC *)[KWMBrandCaramelVC findControllerBy:[KWMBrandCaramelVC kwmTag] fromStoryboard:@"Brand"];
        NSString *brand = self.product.vendor;
        brandCaramelVC.brand = brand;
        brandCaramelVC.handle = [KWMStringUtil deleteOtherCharExceptLetterWithLine:brand];
        brandCaramelVC.isSale = NO;
        [self.navigationController pushViewController:brandCaramelVC animated:YES];
    }
}

//KWMBottomViewDelegate
-(void)kwm_loadNewPage:(BOOL)isSameBrand{
    if(isSameBrand && self.collectionSameBrand!=nil){
        [self requestProducts:self.collectionSameBrand.identifier isSameBrand:isSameBrand];
    }else if(self.collectionSameType!=nil){
        [self requestProducts:self.collectionSameType.identifier isSameBrand:isSameBrand];
    }
}

-(void)kwm_clickCollectionCell:(BUYProduct *)product{
    if(product == nil){
        return;
    }
    self.product = product;
    [self.productDetailView setData:product];
    [self.svContent setContentOffset:CGPointMake(0, 0) animated:YES];
    if(self.product && self.product.imagesArray && self.product.imagesArray.count>0){
        NSInteger imageCount = self.product.imagesArray.count;
        [self.recommendView setCount:imageCount];
    }
    [self initRecommendProduct];
}

#pragma mark - KWMSelectSizeVCDelegate

- (void)kwm_addShopWithVariantId:(NSNumber *)identifier quantity:(NSInteger)quantity variant:(BUYProductVariant *) variant buyNow:(BOOL)buyNow callback:(void (^)(BOOL))callback {
    __weak KWMProductDetailVC *this = self;
    if (!buyNow) {
        [[KWMShoppingCart sharedInstance] increaseProductWithVariantId:identifier quantity:quantity callback:^(NSError *error, KWMCartResult *cart) {
            if (cart.items.firstObject && !cart.items.firstObject.product_id) {
                KWMShopCartModel *model = cart.items.firstObject;
                BUYImageLink *il = this.product.images.firstObject;
//                model.imageStr = [KWMImageUtil getProductImageUrl:this.product.identifier ImageSize:NormalImage];
                model.imageStr = [KWMImageUtil getProductImageUrlByOriginalUrl:il.sourceURL.absoluteString ImageSize:NormalImage];
                model.name = this.product.title;
                model.brand = this.product.vendor;
                model.size = variant.title;
//                model.price = variant.price.floatValue;
                model.price = variant.price;
                model.product_id = this.product.identifier;
            }
           if (!error) {
               [this showToast:@"添加成功"];
               [this.btnShopCart setTitle:cart.item_count.stringValue forState:UIControlStateNormal];
               callback(YES);
           }else{
               [this showError:error];
               callback(NO);
           }
            }];
        return;
    }
    callback(YES);
    KWMUserModel *useModel = [KWMUserModel shareUser];
    if (!useModel.status) {
        //登录
        KWMLoginVC *loginVc = (KWMLoginVC *)[KWMBaseVC findControllerBy:[KWMLoginVC kwmTag] fromStoryboard:@"Login"];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:loginVc];
        [self presentViewController:nav animated:YES completion:nil];
        return;
    }
    [self showLoading];
    [self.api tmpCartWithVariantId:identifier quantity:quantity success:^(NSURLSessionDataTask *task, NSString *cartCookie) {
        [this hideLoading];
        KWMBeforePayVC *beforePayVC = (KWMBeforePayVC *)[KWMBaseVC findControllerBy:[KWMBeforePayVC kwmTag] fromStoryboard:@"ShopCart"];
        beforePayVC.cartCookie = cartCookie;
        [this.navigationController pushViewController:beforePayVC animated:YES];
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        [this showError:error];
    }];
    
}

////KWMSelectSizeVCDelegate
//-(void)kwm_addShopCartItem:(KWMShopCartModel *)shopCartModel{
//    [self initShopCartCount];
//}
//
//-(void)kwm_fastBuy:(BUYCart *)fastBuyCart{
//    if(fastBuyCart == nil){
//        return;
//    }
//    KWMUserModel *useModel = [KWMUserModel shareUser];
//    if (useModel.status) {
//        KWMBeforePayVC *beforePayVC = (KWMBeforePayVC *)[KWMBaseVC findControllerBy:[KWMBeforePayVC kwmTag] fromStoryboard:@"ShopCart"];
//        beforePayVC.fastPayCart = fastBuyCart;
//        [self.navigationController pushViewController:beforePayVC animated:YES];}
//    //用户未登录
//    else{
//        KWMLoginVC *loginVc = (KWMLoginVC *)[KWMBaseVC findControllerBy:[KWMLoginVC kwmTag] fromStoryboard:@"Login"];
//        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:loginVc];
//        [self presentViewController:nav animated:YES completion:nil];
//    }
//}

#pragma mark - KWMSelectSizeVCDelegate End

-(void)initRecommendProduct{
    if(self.product == nil){
        return;
    }
    [self.recommendView clear];
    [self.recommendView setBrandString:self.product.vendor];
    NSString *handle = [KWMStringUtil deleteOtherCharExceptLetterWithLine:self.product.vendor];
    //该商品的品牌不为nil
    if(self.product.vendor){
        [self requestCollection:handle isSameBrand:YES];
    }
    //该商品的类型不为nil
    if(self.product.productType){
        [self requestCollection:self.product.productType isSameBrand:NO];
    }
}

//获取相同类型商品collection/相同品牌商品collection
-(void)requestCollection:(NSString *)handle isSameBrand:(BOOL)isSameBrand{
    __weak KWMProductDetailVC *weakSelf = self;
    [self.client getCollectionByHandle:handle completion:^(BUYCollection *collection, NSError *error) {
        if(!error && collection!=nil){
            if(isSameBrand){
                [weakSelf hideLoading];
                weakSelf.collectionSameBrand = collection;
            }else{
                weakSelf.collectionSameType = collection;
            }
            [self requestProducts:collection.identifier isSameBrand:isSameBrand];
        }else if(error != nil){
            [self showError:error];
        }
    }];
}

//获取某个商品集合,并将其设置到猜你喜欢view中
-(void)requestProducts:(NSNumber *)collectionId isSameBrand:(BOOL)isSameBrand{
    __weak KWMProductDetailVC *weakSelf = self;
    NSInteger targetPage;
    if(isSameBrand){
        if(self.recommendView.isLoadingSameBrand){
            return;
        }
        targetPage = self.recommendView.pageSameBrand + 1;
        self.recommendView.isLoadingSameBrand = YES;
    }else{
        if(self.recommendView.isLoadingSameType){
            return;
        }
        targetPage = self.recommendView.pageSameType + 1;
        self.recommendView.isLoadingSameType = YES;
    }
    
    [self.client getProductsPage:targetPage inCollection:collectionId withTags:nil sortOrder:BUYCollectionSortCollectionDefault completion:^(NSArray<BUYProduct *> *products, NSUInteger page, BOOL reachedEnd, NSError *error) {
        if(isSameBrand){
            self.recommendView.isLoadingSameBrand = NO;
        }else{
            self.recommendView.isLoadingSameType = NO;
        }
        if(!error && products!=nil){
            if(isSameBrand){
                weakSelf.recommendView.pageSameBrand += 1;
            }else{
                weakSelf.recommendView.pageSameType += 1;
            }
            [weakSelf.recommendView setData:products isSameBrand:isSameBrand];
        }else if(error != nil){
            [self showError:error];
        }
    }];
}

//查找商品API
- (void)getProductBy:(NSNumber *)productId product:(BUYProduct *)product{
    if(productId == nil && product == nil){
        return;
    }
    [self showLoading];
    [self.client getProductById:productId?productId:product.identifier completion:^(BUYProduct * _Nullable product, NSError * _Nullable error) {
        [self hideLoading];
        if (product != nil && error == nil) {
            self.product = product;
            if(productId){
                [self kwm_clickCollectionCell:product];
            }
        }else{
            self.product = nil;
            [self showError:error];
        }
    }];
}


@end