

#import "XXGMarqueeView.h"
#import "XXGMarqueeViewCell.h"
#import "UIImageView+WebCache.h"
#import "UIView+WebCache.h"

@interface XXGMarqueeView ()
@property (nonatomic, strong) UIImageView *xxpk_runwayBgImageView;
@end

@implementation XXGMarqueeView

- (void)insertMarqueeViewWithModel:(XXGMQTTTopicInfo *)model {

    NSMutableArray *cells = [NSMutableArray new];
    for (int i = 0; i<model.xxpk_count; i++) {
        XXGMarqueeViewCell *cell = [[XXGMarqueeViewCell alloc]init];
        cell.barrageSpeed = model.xxpk_speed;
        cell.channelCount = 1;
        cell.margin = 6;
        cell.afterDelayExit = CGFLOAT_MIN;
        CGRect fontRect = [model.xxpk_message boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:model.xxpk_style_text_font_size] forKey:NSFontAttributeName] context:nil];
        cell.barrageSize = CGSizeMake(fontRect.size.width+8, fontRect.size.height+4);
        cell.model = model;
        [cells addObject:cell];
    }
    [self insertBarrages:cells];
}

- (void)xxpk_updateRunwayBackgroundWithModel:(XXGMQTTTopicInfo *)model {
    NSString *url = model.xxpk_style_background_img;

    if (url.length == 0) {
        _xxpk_runwayBgImageView.hidden = YES;
        _xxpk_runwayBgImageView.image = nil;
        return;
    }

    UIImageView *bg = self.xxpk_runwayBgImageView;
    bg.hidden = NO;
    if (bg.superview != self) {
        [self insertSubview:bg atIndex:0];
    } else {
        [self sendSubviewToBack:bg];
    }

    [bg sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        if (image) [self xxpk_layoutBgImageView:bg image:image];
    }];
}

- (void)xxpk_layoutBgImageView:(UIImageView *)bg image:(UIImage *)image {
    CGFloat width = self.bounds.size.width;
    CGFloat height = self.bounds.size.height;
    if (image.size.width > 0) {
        CGFloat imgHeight = image.size.height / image.size.width * width;
        
        CGFloat offsetY = (height - imgHeight) * 0.5;
        bg.frame = CGRectMake(0, offsetY, width, imgHeight);
    } else {
        bg.frame = self.bounds;
    }
}

- (UIImageView *)xxpk_runwayBgImageView {
    if (!_xxpk_runwayBgImageView) {
        _xxpk_runwayBgImageView = [[UIImageView alloc] init];
        _xxpk_runwayBgImageView.contentMode = UIViewContentModeScaleToFill;
        _xxpk_runwayBgImageView.userInteractionEnabled = NO;
        _xxpk_runwayBgImageView.clipsToBounds = NO;
    }
    return _xxpk_runwayBgImageView;
}


- (void)xxpk_removeRunwayBackground {
    if (_xxpk_runwayBgImageView) {
        [_xxpk_runwayBgImageView sd_cancelLatestImageLoad];
        [_xxpk_runwayBgImageView removeFromSuperview];
        _xxpk_runwayBgImageView.image = nil;
        _xxpk_runwayBgImageView = nil;
    }
}

- (void)stop {
    [super stop];
    [self xxpk_removeRunwayBackground];
}

- (void)removeFromSuperview {
    [self xxpk_removeRunwayBackground];
    [super removeFromSuperview];
}

@end
