//
//  backupsFileRecordCell.m
//  隐私保护
//
//  Created by xd h on 2024/1/4.
//

#import "backupsFileRecordCell.h"

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

@interface backupsFileRecordCell ()
@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;

@property(nonatomic,strong) UILabel *rightTiplabel;

@end

@implementation backupsFileRecordCell

- (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.textColor = [UIColor blackColor];
    //_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);
    }];
    
    
    _rightTiplabel = [[UILabel alloc] init];
    _rightTiplabel.font = [UIFont systemFontOfSize:12.0];
    _rightTiplabel.textColor = [UIColor hwColor:@"#959799" alpha:1.0];
    _rightTiplabel.textAlignment = NSTextAlignmentRight;
    _rightTiplabel.numberOfLines = 0;
    //_fileSpeedlabel.backgroundColor = [UIColor blackColor];
    [self.contentView addSubview:_rightTiplabel];
    
    [_rightTiplabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.mas_equalTo(-15.0);
        make.left.mas_equalTo(_progressBgView.mas_centerX);
        make.height.mas_equalTo(30);
        make.centerY.mas_equalTo(0);
    }];
    
    //长按手势
    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)setCurPhotosBackupsTaskModel:(photosBackupsTaskModel *)curPhotosBackupsTaskModel
{
    _curPhotosBackupsTaskModel = curPhotosBackupsTaskModel;
    
    //test code
    //_curPhotosBackupsTaskModel.curBackupsState = backupsStateUploading;
    
    _fileImageView.image = [UIImage imageNamed:@"uploadFile_image"];
    
    _fileSpeedlabel.hidden = YES;
    _rightTiplabel.hidden = YES;
    _progressBgView.hidden = NO;
    
    if(_curPhotosBackupsTaskModel.curBackupsState == backupsStateUploading){
       
        _upLoadStateButton.hidden = NO;
        
        [_upLoadStateButton setImage:[UIImage imageNamed:@"uploadFile_suspend"] forState:UIControlStateNormal];
        _fileSpeedlabel.hidden = NO;
        
        //
        _fileSpeedlabel.text = @"";
        
        if(_curPhotosBackupsTaskModel.preTimeInterval <= 0){
            _fileSpeedlabel.text = @"--";
        }
        else{
            NSTimeInterval  timers = _curPhotosBackupsTaskModel.curTimeInterval - _curPhotosBackupsTaskModel.preTimeInterval;
            
            if(timers > 0){
                //long speed= 1*1024*1024 / timers;
                long speed= EachPieceSzie / 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;
            }
        }
        
        _curPhotosBackupsTaskModel.preTimeInterval = _curPhotosBackupsTaskModel.curTimeInterval;
    }
    else if(_curPhotosBackupsTaskModel.curBackupsState == backupsStateSuspend){
        
        [_upLoadStateButton setImage:[UIImage imageNamed:@"uploadFile_start"] forState:UIControlStateNormal];
        _fileSpeedlabel.text = _curPhotosBackupsTaskModel.backupsTipMsg;
        _fileSpeedlabel.hidden = NO;
        
        _upLoadStateButton.hidden = NO;
    }
    else if(_curPhotosBackupsTaskModel.curBackupsState == backupsStateFail){
        _upLoadStateButton.hidden = YES;
        _progressBgView.hidden = YES;
    }
    else{
        _upLoadStateButton.hidden = YES;
        _progressBgView.hidden = YES;
    }
    
    _fileNamelabel.text = NSLocalizedString(@"set_Privacy_title_image",nil);
    
    
    if(_curPhotosBackupsTaskModel.curBackupsState == backupsStateDone){
        
        NSString * curTimerStr = _curPhotosBackupsTaskModel.bg_updateTime;
        if(!curTimerStr){
            curTimerStr = _curPhotosBackupsTaskModel.bg_createTime;
        }
        
        if(curTimerStr){
            curTimerStr = [curTimerStr substringToIndex:(curTimerStr.length -4)];
        }
        
        _fileProgresslabel.text = curTimerStr;
        
        _rightTiplabel.hidden = NO;
        
        _rightTiplabel.text = [[NSString alloc] initWithFormat:@"%@:%ld",NSLocalizedString(@"File_Transfer_List_head_title_done",nil),_curPhotosBackupsTaskModel.didBackupsCount];
    }
    else if(_curPhotosBackupsTaskModel.curBackupsState == backupsStateFail){
        
        _fileProgresslabel.text = [[NSString alloc] initWithFormat:@"%ld/%ld",_curPhotosBackupsTaskModel.didBackupsCount,_curPhotosBackupsTaskModel.count];
        
        //_curPhotosBackupsTaskModel.backupsTipMsg = @"备份失败，备份路径不存在";
        _rightTiplabel.hidden = NO;
        _rightTiplabel.textColor = [UIColor hwColor:@"#DD4E4E" alpha:1.0];
        _rightTiplabel.text = _curPhotosBackupsTaskModel.backupsTipMsg;
    }
    else{
        _fileProgresslabel.text = [[NSString alloc] initWithFormat:@"%ld/%ld",_curPhotosBackupsTaskModel.didBackupsCount,_curPhotosBackupsTaskModel.count - _curPhotosBackupsTaskModel.failCount];
        
        //进度设置
        CGRect frame = CGRectMake(0, 0, SCREEN_W - 15*2 - 34*2, 2);
        
        CGFloat curProgress = _curPhotosBackupsTaskModel.didBackupsCount/((_curPhotosBackupsTaskModel.count - _curPhotosBackupsTaskModel.failCount)*1.0);

        if(curProgress > 1){
            curProgress = 1;
        }

        frame.size.width =  frame.size.width * curProgress;
        
        if (isnan(frame.size.width))
        {
            return;
        }
        
        _progressSelectView.frame = frame;
        //_glayer.frame = frame;
    }
    
}


-(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(_curPhotosBackupsTaskModel.curBackupsState == backupsStateUploading){
        [_upLoadStateButton setImage:[UIImage imageNamed:@"uploadFile_start"] forState:UIControlStateNormal];
    }
    else if(_curPhotosBackupsTaskModel.curBackupsState == backupsStateSuspend){
       
        [_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
