//
//  KWMBannerView.m
//  iCemarose
//
//  Created by HouWeiBin on 2017/5/31.
//  Copyright © 2017年 kollway. All rights reserved.
//

#import "KWMBannerView.h"

@implementation KWMBannerView{
    iCarousel *carousel;
    NSTimer *timer;
    BOOL isFirstLoad;
    BOOL isScroll;
    
}

-(void)addTimer{
    [self removeTimer];
    isFirstLoad = YES;
    timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(doTimer) userInfo:nil repeats:YES];
    [timer setFireDate:[NSDate distantPast]];//开启
}

-(void)removeTimer{
    //结束
    if([timer isValid]){
        [timer invalidate];
        timer = nil;
    }
}

-(void)doTimer{
    NSInteger pageCount = self.delegate?[self.delegate numberOfPagesForBanner:self]:0;
    if(pageCount > 0 && !isScroll){
        if(isFirstLoad){ //避免出现第一次显示就是第二页的情况
            isFirstLoad = NO;
            return;
        }
        NSInteger currentIndex = self.pageIndex;
        currentIndex ++;
        [carousel scrollToItemAtIndex:currentIndex animated:YES];
        [self updateUIOnPageChange];
    }
}

-(instancetype)init{
    self = [super init];
    if(self){
    }
    return self;
}

-(id)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if(self){
        [self initBannerView:frame];
    }
    return self;
}

-(instancetype)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self initBannerView:self.frame];
    }
    return self;
}

-(void)awakeFromNib{
    [super awakeFromNib];
}

-(void)setDelegate:(id<KWMBannerViewDelegate>)delegate{
    _delegate = delegate;
    if(delegate){
        [self reloadData];
    }
}

-(void)reloadData{
    if(carousel){
        [carousel reloadData];
    }
    if(self.foregroundView && self.foregroundView.tag == 1002){
        KWMPageControl *pageControl = (KWMPageControl *)self.foregroundView;
        pageControl.numberOfPages = [self numberOfItemsInCarousel:carousel];
        //pageControl圆点右对齐
        NSInteger count = self.delegate?[self.delegate numberOfPagesForBanner:self]:0;
        CGSize pageControlSize = [pageControl sizeForNumberOfPages:count];
        CGFloat paddingLeft = (pageControl.bounds.size.width - pageControlSize.width) / 2 - 15;
        [pageControl setBounds:CGRectMake(-paddingLeft, pageControl.bounds.origin.y,
                                          pageControl.bounds.size.width, pageControl.bounds.size.height)];
    }
}

-(void)initBannerView:(CGRect)frame{
    carousel = [[iCarousel alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
    carousel.delegate = self;
    carousel.dataSource = self;
    carousel.decelerationRate = 0.5;
    carousel.type = iCarouselTypeLinear;
    carousel.clipsToBounds = YES;
    [self addSubview:carousel];
    
    UIImageView *noDataImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
    noDataImageView.contentMode = UIViewContentModeCenter;
    UIImage *noDataImage = [UIImage imageNamed:@"ic_logo"];
    noDataImageView.image = noDataImage;
    noDataImageView.tag = 1001;//用于判断是否默认背景view
    self.backgroundView = noDataImageView;
    
    CGRect pageControlFrame = CGRectMake(0, frame.size.height - 20, frame.size.width, 20);
    UIImage *defaultImage = [UIImage imageNamed:@"ic_page_1"];
    UIImage *currentImage = [UIImage imageNamed:@"ic_page_2"];
    KWMPageControl *pageControl = [[KWMPageControl alloc]initWithFrame:pageControlFrame currentImage:currentImage andDefaultImage:defaultImage];
    pageControl.numberOfPages = 4;
    pageControl.currentPage = 0;
    pageControl.tag = 1002;//用于判断是否默认前景view
    self.foregroundView = pageControl;
}

-(NSInteger)pageIndex{
    if(carousel){
        return carousel.currentItemIndex;
    }
    return 0;
}

-(void)setBackgroundView:(UIView *)backgroundView{
    _backgroundView = backgroundView;
    UIView *oldBackgroundView  = [self viewWithTag:101];
    if(oldBackgroundView){
        [oldBackgroundView removeFromSuperview];
    }
    oldBackgroundView = [self viewWithTag:1001];
    if(oldBackgroundView){
        [oldBackgroundView removeFromSuperview];
    }
    if(backgroundView){
        backgroundView.tag = 101;
        [self addSubview:backgroundView];
        [self sendSubviewToBack:backgroundView];
    }
}

-(void)setForegroundView:(UIView *)foregroundView{
    _foregroundView = foregroundView;
    UIView *oldForegroundView  = [self viewWithTag:102];
    if(oldForegroundView){
        [oldForegroundView removeFromSuperview];
    }
    oldForegroundView = [self viewWithTag:1002];
    if(oldForegroundView){
        [oldForegroundView removeFromSuperview];
    }
    if(foregroundView){
        //设置tag前先判断是否默认foregroundView,以免覆盖了tag
        foregroundView.tag = foregroundView.tag == 1002?1002:102;
        [self addSubview:foregroundView];
        [self bringSubviewToFront:foregroundView];
    }
}

-(void)updateUIOnPageChange{
    
    if(self.foregroundView && self.foregroundView.tag == 1002){
        KWMPageControl *pageControl = (KWMPageControl *)self.foregroundView;
        pageControl.currentPage = self.pageIndex;
    }
    
    if(self.delegate){
        if([self.delegate respondsToSelector:@selector(bannerView:onPageIndexChange:)]){
            [self.delegate bannerView:self onPageIndexChange:self.pageIndex];
        }
        if([self.delegate respondsToSelector:@selector(bannerView:backgroundView:updateBackgroundViewAtIndex:)]
           && self.backgroundView){
            [self.delegate bannerView:self backgroundView:self.backgroundView updateBackgroundViewAtIndex:self.pageIndex];
        }
        if([self.delegate respondsToSelector:@selector(bannerView:foregroundView:updateForegroundViewAtIndex:)]
           && self.foregroundView){
            [self.delegate bannerView:self foregroundView:self.backgroundView updateForegroundViewAtIndex:self.pageIndex];
        }
    }
}

#pragma mark iCarousel methods
- (NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
    if(self.delegate){
        return [self.delegate numberOfPagesForBanner:self];
    }
    return 0;
}

- (NSUInteger)numberOfVisibleItemsInCarousel:(iCarousel *)carousel
{
    return 3;
}

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view{
    if(self.delegate){
        return [self.delegate bannerView:self reusingView:view pageAtIndex:index];
    }
    return nil;
}


-(void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index{
    if(self.delegate){
        [self.delegate bannerView:self onClickPage:index];
    }
}

- (void)carouselDidEndDragging:(iCarousel *)carousel willDecelerate:(BOOL)decelerate{
    [self updateUIOnPageChange];
}

- (void)carouselDidEndDecelerating:(iCarousel *)carousel{
    [self updateUIOnPageChange];
}


- (CGFloat)carouselItemWidth:(iCarousel *)carousel
{
    return self.frame.size.width;
}

-(void)carouselDidEndScrollingAnimation:(iCarousel *)carousel{
    isScroll = NO;
}

-(void)carouselDidScroll:(iCarousel *)carousel{
    isScroll = YES;
}

- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value
{
    switch (option)
    {
        case iCarouselOptionWrap:
        {
            return YES;
        }
        default:
        {
            return value;
        }
    }
}






@end