//
//  uploadFileRecordCell.m
//  隐私保护
//
//  Created by xd h on 2023/11/16.
//

#import "uploadFileRecordCell.h"
#import "cachesFileManager.h"
#import <SDWebImage/SDWebImage.h>

@interface uploadFileRecordCell ()
@property(nonatomic,strong) UIImageView *fileImageView;
@property(nonatomic,strong) UIButton *upLoadStateButton;

@property (nonatomic, strong) UIButton *selectButton;

@property(nonatomic,strong) UIView *progressBgView;
@property(nonatomic,strong) UIView *progressSelectView;
@property(nonatomic,strong) CAGradientLayer *glayer;

@property(nonatomic,strong) UILabel *fileNamelabel;
@property(nonatomic,strong) UILabel *fileProgresslabel;
@property(nonatomic,strong) UILabel *fileSpeedlabel;
@end

@implementation uploadFileRecordCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    
    if (self)
    {
        [self drawView];
    }
    
    return self;
}

- (void)drawView
{
    _fileImageView = [[UIImageView alloc] init];
    //_fileImageView.backgroundColor = [UIColor greenColor];
    [self.contentView addSubview:_fileImageView];
    
    [_fileImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(15);
        make.width.mas_equalTo(34);
        make.height.mas_equalTo(34);
        make.bottom.mas_equalTo(-18);
    }];
    
    _upLoadStateButton = [[UIButton alloc] init];
    //_upLoadStateButton.backgroundColor = [UIColor redColor];
    [self.contentView addSubview:_upLoadStateButton];
    [_upLoadStateButton addTarget:self action:@selector(tapClick:) forControlEvents:UIControlEventTouchUpInside];
    
    [_upLoadStateButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.mas_equalTo(-5);
        make.width.mas_equalTo(50);
        make.height.mas_equalTo(50);
        make.bottom.mas_equalTo(-18);
    }];
    
    if (self.selectButton == nil) {
        UIButton *but = [[UIButton alloc] init];
        [but setImage:[UIImage imageNamed:@"upload_file_uncheck"] forState:UIControlStateNormal];
        [but setImage:[UIImage imageNamed:@"upload_file_check"] forState:UIControlStateSelected];
        [self.contentView addSubview:but];
        [but addTarget:self action:@selector(didClickSelectButFun:) forControlEvents:UIControlEventTouchUpInside];
        but.hidden = YES;
        //but.backgroundColor = [UIColor greenColor];
        //but.frame = CGRectMake([UIScreen mainScreen].bounds.size.width -10 - 25, 0, 25, 25);
        [but mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.mas_equalTo(30);
            make.height.mas_equalTo(30);
            make.centerX.mas_equalTo(_upLoadStateButton.mas_centerX);
            make.centerY.mas_equalTo(_upLoadStateButton.mas_centerY);
        }];
        
        self.selectButton = but;
    }
    
    _progressBgView = [[UIView alloc] init];
    _progressBgView.backgroundColor = [UIColor hwColor:@"#F9F9F9" alpha:1.0];
    _progressBgView.layer.cornerRadius = 1.5;
    _progressBgView.layer.masksToBounds = YES;
    [self.contentView addSubview:_progressBgView];
    
    [_progressBgView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(_fileImageView.mas_right).offset(10);
        make.right.mas_equalTo(_upLoadStateButton.mas_left).offset(-10);
        make.height.mas_equalTo(2);
        make.centerY.mas_equalTo(0);
    }];
    
    _progressSelectView = [[UIView alloc] init];
    //_progressSelectView.backgroundColor = [UIColor hwColor:@"#F9F9F9" alpha:1.0];
    _progressSelectView.layer.cornerRadius = 1.5;
    _progressSelectView.layer.masksToBounds = YES;
    [_progressBgView addSubview:_progressSelectView];
    
//    [_progressSelectView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.left.mas_equalTo(0);
//        make.right.mas_equalTo(-100);
//        make.height.mas_equalTo(3);
//        make.centerY.mas_equalTo(0);
//    }];
    
    // gradient
    _glayer = [CAGradientLayer layer];
    _glayer.startPoint = CGPointMake(0, 0.5);
    _glayer.endPoint = CGPointMake(1, 0.5);
    _glayer.colors = @[(__bridge id)[UIColor hwColor:@"#0BDDFD" alpha:1.0].CGColor, (__bridge id)[UIColor hwColor:@"#048CFB" alpha:1.0].CGColor];
    _glayer.locations = @[@(0), @(1.0f)];
    [_progressSelectView.layer addSublayer:_glayer];
    
    CGRect frame = CGRectMake(0, 0, SCREEN_W, 2);
    //_progressSelectView.frame = frame;
    _glayer.frame = frame;
    
    _fileNamelabel = [[UILabel alloc] init];
    _fileNamelabel.font = [UIFont boldSystemFontOfSize:16.0];
    //_fileNamelabel.backgroundColor = [UIColor greenColor];
    [self.contentView addSubview:_fileNamelabel];
    
    [_fileNamelabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(_fileImageView.mas_right).offset(10);
        make.right.mas_equalTo(_upLoadStateButton.mas_left).offset(-10);
        make.height.mas_equalTo(19);
        make.bottom.mas_equalTo(_progressBgView.mas_top).offset(-3);
    }];
    
    _fileProgresslabel = [[UILabel alloc] init];
    _fileProgresslabel.font = [UIFont systemFontOfSize:12.0];
    _fileProgresslabel.textColor = [UIColor hwColor:@"#959799" alpha:1.0];
    //_fileProgresslabel.backgroundColor = [UIColor greenColor];
    [self.contentView addSubview:_fileProgresslabel];
    
    [_fileProgresslabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(_fileImageView.mas_right).offset(10);
        make.right.mas_equalTo(_progressBgView.mas_centerX).offset(100);
        make.height.mas_equalTo(15);
        make.top.mas_equalTo(_progressBgView.mas_bottom).offset(3);
    }];
    
    _fileSpeedlabel = [[UILabel alloc] init];
    _fileSpeedlabel.font = [UIFont systemFontOfSize:12.0];
    _fileSpeedlabel.textColor = [UIColor hwColor:@"#959799" alpha:1.0];
    _fileSpeedlabel.textAlignment = NSTextAlignmentRight;
    //_fileSpeedlabel.backgroundColor = [UIColor blackColor];
    [self.contentView addSubview:_fileSpeedlabel];
    
    [_fileSpeedlabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.mas_equalTo(_upLoadStateButton.mas_left).offset(-10);
        make.left.mas_equalTo(_progressBgView.mas_centerX);
        make.height.mas_equalTo(15);
        make.top.mas_equalTo(_progressBgView.mas_bottom).offset(3);
    }];
    
    //长按手势
    UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressClick:)];
    //用几个手指触屏，默认1
    longPressGesture.numberOfTouchesRequired = 1;
    //设置最短长按时间，单位为秒（默认0.5）
    longPressGesture.minimumPressDuration = 1;
    //设置手势识别期间所允许的手势可移动范围
    longPressGesture.allowableMovement = 10;
    [self.contentView addGestureRecognizer:longPressGesture];

}

- (void)setIsEditType:(BOOL)isEditType
{
    _isEditType = isEditType;
    
    if(isEditType){
        self.selectButton.hidden = NO;
        
//        if(_curUploadFileDataModel.curUploadStateType == uploadStateWait
//           ||_curUploadFileDataModel.curUploadStateType == uploadStateUploading
//           ||_curUploadFileDataModel.curUploadStateType == uploadStateSuspend){
            _upLoadStateButton.hidden = YES;
        //}
    }
    else{
        self.selectButton.hidden = YES;
        
//        if(_curUploadFileDataModel.curUploadStateType == uploadStateWait
//           ||_curUploadFileDataModel.curUploadStateType == uploadStateUploading
//           ||_curUploadFileDataModel.curUploadStateType == uploadStateSuspend){
            _upLoadStateButton.hidden = NO;
        //}
    }
}

- (void)setIsSelectType:(BOOL)isSelectType
{
    _isSelectType = isSelectType;
    
    if(isSelectType){
        self.selectButton.selected = YES;
    }
    else{
        self.selectButton.selected = NO;
    }
}

- (void)setCurUploadFileDataModel:(uploadFileDataModel *)curUploadFileDataModel
{
    _curUploadFileDataModel = curUploadFileDataModel;
    //HLog(@"hhhhhhh  %@ %ld %ld",curUploadFileDataModel.bg_id,curUploadFileDataModel.curUploadStateType,curUploadFileDataModel.didUploadBytes);
    
    if(curUploadFileDataModel.imageData){
        _fileImageView.image = [UIImage imageWithData:curUploadFileDataModel.imageData];
    }
    else{
        if(curUploadFileDataModel.curUploadFileType == uploadFileTypeImage){
            NSString*pathStr = [cachesFileManager getFilePathWithName:curUploadFileDataModel.filename type:curUploadFileDataModel.curUploadFileType];
            _fileImageView.image = [UIImage imageWithContentsOfFile:pathStr];
        }
        else{
            NSString*pathStr = [cachesFileManager getFilePathWithName:curUploadFileDataModel.videoFirstImageName type:uploadFileTypeImage];
             UIImage *image = [UIImage imageWithContentsOfFile:pathStr];
            _fileImageView.image = image;
        }
    }
    
    
    
    //_fileImageView.image = [UIImage imageWithData:curUploadFileDataModel.imageData];
    _fileSpeedlabel.hidden = YES;
    
    if(curUploadFileDataModel.curUploadStateType == uploadStateWait){
        [_upLoadStateButton setImage:[UIImage imageNamed:@"uploadFile_wait"] forState:UIControlStateNormal];
    }
    else if(curUploadFileDataModel.curUploadStateType == uploadStateUploading){
        [_upLoadStateButton setImage:[UIImage imageNamed:@"uploadFile_suspend"] forState:UIControlStateNormal];
        _fileSpeedlabel.hidden = NO;
        
        //
        _fileSpeedlabel.text = @"";
        
        if(curUploadFileDataModel.preTimeInterval <= 0){
            _fileSpeedlabel.text = @"--";
        }
        else{
            NSTimeInterval  timers = curUploadFileDataModel.curTimeInterval - curUploadFileDataModel.preTimeInterval;
            
            if(timers > 0){
                long speed= 5*1024*1024 / timers;
                NSString * speedStr = nil;
                NSInteger speed_k = speed / (1024);
                if(speed_k < 1024){
                    speedStr = [[NSString alloc] initWithFormat:@"%ldKB/s",speed_k];
                }
                else {
                    speedStr = [[NSString alloc] initWithFormat:@"%.1fMB/s",speed_k/1024.0];
                }
                
                _fileSpeedlabel.text = speedStr;
            }
        }
        
        curUploadFileDataModel.preTimeInterval = curUploadFileDataModel.curTimeInterval;
    }
    else if(curUploadFileDataModel.curUploadStateType == uploadStateSuspend){
        [_upLoadStateButton setImage:[UIImage imageNamed:@"uploadFile_start"] forState:UIControlStateNormal];
    }
    else if(curUploadFileDataModel.curUploadStateType == uploadStateFail){
        [_upLoadStateButton setImage:[UIImage imageNamed:@"uploadFile_reStart"] forState:UIControlStateNormal];
        _progressBgView.hidden = YES;
    }
    else{
        _upLoadStateButton.hidden = YES;
        _progressBgView.hidden = YES;
    }
    
    _fileNamelabel.text = curUploadFileDataModel.filename;
    
    //进度设置
    CGRect frame = CGRectMake(0, 0, SCREEN_W - 15*2 - 34*2, 2);
    
    NSInteger totalSize = curUploadFileDataModel.totalBytes;
//    if(curUploadFileDataModel.curUploadFileType == uploadFileTypeVideo){
//        totalSize = [curUploadFileDataModel.videoData length];
//    }
    
    CGFloat curProgress = curUploadFileDataModel.didUploadBytes/(totalSize*1.0);
    
    //HLog(@"hxdhxdddddddd %@ -- %f -- %ld",curUploadFileDataModel.bg_id,curProgress,curUploadFileDataModel.didUploadBytes );
    
    if(curProgress > 1){
        curProgress = 1;
    }
    
    frame.size.width =  frame.size.width * curProgress;
    _progressSelectView.frame = frame;
    //_glayer.frame = frame;
    
    NSString * totalSizeStr = nil;
    NSInteger totalSize_k = totalSize / 1024;
    if(totalSize_k < 1024){
        totalSizeStr = [[NSString alloc] initWithFormat:@"%ldKB",totalSize_k];
    }
    else if( totalSize_k >= 1024 && totalSize_k < 1024*1024){
        totalSizeStr = [[NSString alloc] initWithFormat:@"%.1fMB",totalSize_k/1024.0];
        
    }
    else{
        totalSizeStr = [[NSString alloc] initWithFormat:@"%.2fG",totalSize_k/1024.0/1024.0];
    }
    
    NSString * didUploadStr = nil;
    NSInteger didUploadSize_k = curUploadFileDataModel.didUploadBytes / 1024;
    if(didUploadSize_k < 1024){
        didUploadStr = [[NSString alloc] initWithFormat:@"%ldKB",didUploadSize_k];
    }
    else if( didUploadSize_k >= 1024 && didUploadSize_k < 1024*1024){
        didUploadStr = [[NSString alloc] initWithFormat:@"%.1fMB",didUploadSize_k/1024.0];
        
    }
    else{
        didUploadStr = [[NSString alloc] initWithFormat:@"%.2fG",didUploadSize_k/1024.0/1024.0];
    }
    
    if(curUploadFileDataModel.curUploadStateType == uploadStateDone){
        _fileProgresslabel.text = [[NSString alloc] initWithFormat:@"%@  %@",totalSizeStr,@"上传到：/sdcard/Download/"];
    }
    else if(curUploadFileDataModel.curUploadStateType == uploadStateFail){
        _fileProgresslabel.text = [[NSString alloc] initWithFormat:@"%@",totalSizeStr];
    }
    else{
        _fileProgresslabel.text = [[NSString alloc] initWithFormat:@"%@/%@",didUploadStr,totalSizeStr];
        
    }
    
}


-(void)longPressClick:(UILongPressGestureRecognizer *)press{
    //state属性是所有手势父类提供的方法，用于记录手势的状态
    if(press.state == UIGestureRecognizerStateBegan){
        //NSLog(@"长按手势开始响应!");
        
        if(_didLongPressClick){
            _didLongPressClick();
        }
        
    }else if (press.state == UIGestureRecognizerStateChanged){
        //NSLog(@"长按手势状态发生改变!");
    }else{
        //NSLog(@"长按手势结束!");
    }

}

- (void)didClickSelectButFun:(UIButton*)but
{
    but.selected = !but.selected;
    if(_didClckSelectBut){
        _didClckSelectBut(but.selected);
    }
}

- (void)tapClick:(UIButton*)but{
    if(_didTapPressClick){
        _didTapPressClick();
    }
    
    if(_curUploadFileDataModel.curUploadStateType == uploadStateUploading){
        [_upLoadStateButton setImage:[UIImage imageNamed:@"uploadFile_start"] forState:UIControlStateNormal];
        
    }
    else if(_curUploadFileDataModel.curUploadStateType == uploadStateSuspend){
       
        [_upLoadStateButton setImage:[UIImage imageNamed:@"uploadFile_suspend"] forState:UIControlStateNormal];
    }
    
    
    but.userInteractionEnabled = NO;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        but.userInteractionEnabled = YES;
    });
}

@end
