//
//  KWMNewHomeVC.m
//  iCemarose
//
//  Created by HouWeiBin on 2017/7/10.
//  Copyright © 2017年 kollway. All rights reserved.
//

#import "KWMNewHomeVC.h"
#import "KWMShopCartVC.h"
#import "KWMNewHomeCell.h"
#import "KWMSearchBar.h"
#import "KWMHomeData.h"
#import "KWMShoppingCart.h"
#import <RegexKitLite/RegexKitLite.h>
#import <RXCollections/RXCollection.h>
#import "KWMHomeVC.h"
#import "KWMWishListVC.h"
#import <MJRefresh.h>

typedef enum{
    
    HeaderAd=0,
    
    HeaderMenu=1,
    
    HeaderRecommend=2,
    
    HeaderClothingSets=3,

    HeaderHotSales=4,
    
}Header;


@interface KWMNewHomeVC ()

@property(nonatomic,weak) IBOutlet UICollectionView *cvHome;

@property(nonatomic,strong) KWMAdHeader *adHeader;

@property(nonatomic,strong) KWMMenuHeader *menuHeader;

@property(nonatomic,strong) KWMRecommendHeader *recommendHeader;

@property(nonatomic,strong) KWMClothingSetsHeader *clothingSetsHeader;

@property(nonatomic,strong) KWMHotSalesHeader *hotSalesHeader;

@property(nonatomic,strong) KWMSearchBar *titleView;

@property(nonatomic) KWMHomeData *homeData;

@property(nonatomic) NSInteger page;

@property(nonatomic) NSMutableArray<BUYProduct *>* productArray;

@property(nonatomic) NSMutableDictionary *dataMapping;

@end

@implementation KWMNewHomeVC

- (void)viewDidLoad {
    [super viewDidLoad];
    [self initView];
    self.page = 1;
//    [self requestProduct:@""];
    [self loadHomeData];
    
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    if(self.adHeader){
        [self.adHeader startBannerTimer];
    }
    if(self.hotSalesHeader){
        [self.hotSalesHeader startBannerTimer];
    }
    [self.navigationController setNavigationBarHidden:YES];
    if (self.titleView) {
        NSInteger count = [[KWMShoppingCart sharedInstance] count].integerValue;
        self.titleView.count = count;
        [self.titleView resumeView];
    }
}

-(void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    if(self.adHeader){
        [self.adHeader endBannerTimer];
    }
    if(self.hotSalesHeader){
        [self.hotSalesHeader endBannerTimer];
    }
}


- (void)initView{
//    self.title = @"首页";
    self.adHeader = [[KWMAdHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, 275)];
    self.menuHeader = [[KWMMenuHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, 100)];
    self.recommendHeader = [[KWMRecommendHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, 230)];
    self.clothingSetsHeader = [[KWMClothingSetsHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, 310)];
    self.hotSalesHeader = [[KWMHotSalesHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, 250)];
    
    self.adHeader.delegate = self;
    self.menuHeader.delegate = self;
    self.recommendHeader.delegate = self;
    self.clothingSetsHeader.delegate = self;
    self.hotSalesHeader.delegate = self;
    
    [self initTitleView];
    [self initCollectionView];
}

-(void)initTitleView{
    self.titleView = [[KWMSearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];
    self.titleView.delegate = self;
    self.titleView.btnSearch.hidden = YES;
    [self.view addSubview:self.titleView];
}

- (void)initCollectionView{
    
    CHTCollectionViewWaterfallLayout *layout = [[CHTCollectionViewWaterfallLayout alloc] init];
    layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
    layout.minimumColumnSpacing = 10;
    layout.minimumInteritemSpacing = 10;
    layout.columnCount = 2;
    self.cvHome.collectionViewLayout = layout;
    
    [self.cvHome registerNib:[UINib nibWithNibName:NSStringFromClass([KWMNewHomeCell class]) bundle:nil] forCellWithReuseIdentifier:NSStringFromClass([KWMNewHomeCell class])];
    
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMAdHeader kwmTag]];
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMHotSalesHeader kwmTag]];
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMRecommendHeader kwmTag]];
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMClothingSetsHeader kwmTag]];
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMMenuHeader kwmTag]];
    
    self.cvHome.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMore)];
}

- (void) loadMore {
    [self requestProductWithHandle:@"products-list-app-homepage" tags:nil valueKeyPath:@"productArray"];
}

#pragma mark - KWMAdDelegate
-(void)kwm_gotoWebView:(NSString *)url{
//    NSLog(@"click webview");
    [self openURLWithString:url];
}

#pragma mark - KWMMenuDelegate
-(void)kwm_onClickHotMenu{
    [self openURLWithString:@"https://cemarose.myshopify.com/collections/new"];
}

-(void)kwm_onClickNewMenu{
    KWMHomeVC* selectedGoodsVC = (KWMHomeVC *)[KWMBaseVC findControllerBy:[KWMHomeVC kwmTag] fromStoryboard:@"Main"];
    [self.navigationController pushViewController:selectedGoodsVC animated:YES];
}

-(void)kwm_onClickWishMenu{
    NSLog(@"wishmenu");
    KWMWishListVC* vc= (KWMWishListVC *)[KWMBaseVC findControllerBy:[KWMWishListVC kwmTag] fromStoryboard:@"NewProduct"];
    [self.navigationController pushViewController:vc animated:YES];
}

-(void)kwm_onClickDeliveryMenu{
    NSLog(@"deliverymenu");
}

#pragma makr - KWMRecommendDelegate KWMClothingSetsDelegate KWMHotSalesDelegate 
-(void)kwm_onClickProduct:(BUYProduct *)product{
//    NSLog(@"product");
    [self openURLWithString:[NSString stringWithFormat:@"https://cemarose.myshopify.com/products/%@",product.handle]];
}


#pragma mark - UICollectionViewDataSource
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 5;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    if(section == HeaderHotSales){
        return self.productArray ? self.productArray.count:0;
    }
    return 0;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    KWMNewHomeCell *homeCell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([KWMNewHomeCell class]) forIndexPath:indexPath];
    BUYProduct *product = [self.productArray objectAtIndex:indexPath.row];
    homeCell.product = product;
    return homeCell;
}

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
    UICollectionReusableView *headerView;
    if (kind == CHTCollectionElementKindSectionHeader) {
        switch (indexPath.section) {
            case HeaderAd:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMAdHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.adHeader];
                }
                break;
            case HeaderMenu:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMMenuHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.menuHeader];
                }
                break;
            case HeaderRecommend:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMRecommendHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.recommendHeader];
                }
                break;
            case HeaderClothingSets:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMClothingSetsHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.clothingSetsHeader];
                }
                break;
            case HeaderHotSales:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMHotSalesHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.hotSalesHeader];
                }
                break;
            default:
                break;
        }
    }
    return headerView;
}

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForHeaderInSection:(NSInteger)section{
    NSInteger height = 0;
    switch (section) {
        case HeaderAd:
            height = 275;
            break;
        case HeaderMenu:
            height = 100;
            break;
        case HeaderRecommend:
            height = 230;
            break;
        case HeaderClothingSets:
            height = 310;
            break;
        case HeaderHotSales:
            height = self.hotSalesHeader.actrualHeight;
            break;
        default:
            break;
    }
    return height;
}

#pragma mark - CHTCollectionViewDelegateWaterfallLayout
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    [self kwm_onClickProduct:self.productArray[indexPath.item]];
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    BUYProduct *product = [self.productArray objectAtIndex:indexPath.row];
    NSInteger width = (UI_SCREEN_WIDTH-30)/2;
    NSInteger height = [KWMNewHomeCell acturlHeight:product width:width];
    CGSize size = CGSizeMake(width, height);
    return size;
}

#pragma mark - KWMSearchBarDelegate
- (void)kwm_onClickShopCar{
    //购物车
    KWMShopCartVC *contactVC = (KWMShopCartVC *)[KWMBaseVC findControllerBy:[KWMShopCartVC kwmTag] fromStoryboard:@"ShopCart"];
    [self.navigationController pushViewController:contactVC animated:YES];
}

#pragma makr - api
//- (void)requestProduct:(NSString *)tag{
//    NSMutableArray *tags = nil;
//    if(tag){
//        tags = [NSMutableArray array];
//        [tags addObject:tag];
//    }
//    
//    __weak KWMNewHomeVC *weakSelf = self;
//    [self showLoading];
//    [self.client getProductsPage:1 inCollection:@(Collection_All_ID) withTags:tags sortOrder:BUYCollectionSortBestSelling completion:^(NSArray *products,NSUInteger page, BOOL reachedEnd, NSError *error){
//        [weakSelf hideLoading];
//        if(error){
//            [weakSelf showError:error];
//        }
//        else if(products && products.count>0){
//            weakSelf.productArray = products;
//            [weakSelf.cvHome reloadData];
////            [weakSelf initTestData];
//        }
//    }];    
//}

- (void) requestProductWithHandle:(NSString *) handle tags:(NSArray *) tags valueKeyPath:(NSString *) valueKeyPath {
    [self showLoading];
    BOOL isHome = [handle isEqualToString:@"products-list-app-homepage"];
    NSInteger cpage = isHome ? self.page : 1;
    [self.client getCollectionByHandle:handle completion:^(BUYCollection * _Nullable collection, NSError * _Nullable error) {
        if (!error) {
            [self.client getProductsPage:cpage inCollection:collection.identifier withTags:tags sortOrder:BUYCollectionSortCollectionDefault completion:^(NSArray<BUYProduct *> * _Nullable products, NSUInteger page, BOOL reachedEnd, NSError * _Nullable error) {
                [self hideLoading];
                
                if (!error) {
                    [self setValue:products forKeyPath:valueKeyPath];
                    [self.cvHome reloadData];
                }else{
                    [self showError:error];
                }
                if (isHome) {
                    self.page = self.page + 1;
                    products.count ? [self.cvHome.mj_footer endRefreshing] : [self.cvHome.mj_footer endRefreshingWithNoMoreData];
                }
            }];
        }else{
            [self hideLoading];
            [self showError:error];
        }
    }];
}

- (void) loadHomeData {
    [self requestProductWithHandle:@"hot-sell-app" tags:nil valueKeyPath:@"recommendHeader.productArray"];
    [self.api getHomeDataWithSuccess:^(NSURLSessionDataTask *task, KWMHomeDataResult *result) {
        self.homeData = result.data;
        [self.cvHome reloadData];
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        [self showError:error];
    }];
}

- (void)setHomeData:(KWMHomeData *)homeData {
    _homeData = homeData;
    [homeData.ad_banner[0] setUrl:@"https://www.cemarose.com/blogs/news/article-1"];
    self.adHeader.adArray = self.homeData.ad_banner;
//    self.recommendHeader.productArray = self.productArray;
//    self.clothingSetsHeader.productArray = self.productArray;
//    self.homeData.hot_sales.single_show_count = @(3);
    self.clothingSetsHeader.headerImage = self.homeData.clothing_sets.image;
//    self.hotSalesHeader.singleShowArray = testArray;
//    self.hotSalesHeader.bannerArray = testArray;
    NSArray *clothingParam = [self.homeData.clothing_sets.url arrayOfCaptureComponentsMatchedByRegex:@"collections\\/(.*?)\\/(.*)"];
    if (clothingParam.count) {
        clothingParam = clothingParam.firstObject;
        NSString *handle = clothingParam.count > 1 ? clothingParam[1] : nil;
        NSArray *tags = clothingParam.count > 2 ? [clothingParam[2] componentsSeparatedByString:@"+"] : nil;
        if (handle) {
            [self requestProductWithHandle:handle tags:tags valueKeyPath:@"clothingSetsHeader.productArray"];
        }
    }
    [self requestProductWithHandle:@"products-list-app-homepage" tags:nil valueKeyPath:@"productArray"];
    NSLog(@"path:%@",clothingParam);
}

- (void)setProductArray:(NSArray<BUYProduct *> *)productArray {
    if (!_productArray) {
        NSInteger ssize = self.homeData.hot_sales.single_show_count.integerValue;
        NSInteger count = productArray.count;
        self.hotSalesHeader.singleShowArray = count <= ssize ? productArray : [productArray subarrayWithRange:NSMakeRange(0, ssize)];
        _productArray = [[NSMutableArray alloc] init];
//        [_productArray addObjectsFromArray:[productArray subarrayWithRange:NSMakeRange(self.homeData.hot_sales.single_show_count.integerValue, 99)]];
        if (count > ssize) {
        [_productArray addObjectsFromArray:[productArray subarrayWithRange:NSMakeRange(ssize, count - ssize)]];
        }
    }else{
        [_productArray addObjectsFromArray:productArray];
    }
//    _productArray = productArray;
    
}

@end