ProfileHeaderView.m 16.2 KB
//
//  ProfileHeaderView.m
//  DreamSleep
//
//  Created by peter on 2022/5/18.
//

#import "ProfileHeaderView.h"

@interface ProfileHeaderView ()
@property (nonatomic, strong) UIView *userInfoView;
@property (nonatomic, strong) UILabel *meLab;
@property (nonatomic, strong) UIImageView *portraitIV;
@property (nonatomic, strong) UILabel *titleLab;
@property (nonatomic, strong) UIImageView *levelIV;
@property (nonatomic, strong) UIButton *modifyBtn;
@property (nonatomic, strong) UIView *scoreTaskEvaluateView;
@property (nonatomic, strong) UILabel *scoreCountLab;
@property (nonatomic, strong) UIButton *openAIBtn;
@property (nonatomic, strong) UIView *reportReviewsView;
@end

@implementation ProfileHeaderView

#pragma mark - Action
- (void)modifyAction {
    if (self.delegate && [self.delegate respondsToSelector:@selector(didClickModifyUserBtn)]) {
        [self.delegate didClickModifyUserBtn];
    }
}

- (void)monitorAIStartNoti {
    UserModel *usrModel = [LoginUtils getUserLoginData];
    self.openAIBtn.hidden = usrModel.is_access == 1;
    self.reportReviewsView.hidden = !self.openAIBtn.hidden;
}

- (void)updateUserView {
    UserModel *model = [LoginUtils getUserLoginData];
    if (model) {
        [self.portraitIV yy_setImageWithURL:[NSURL URLWithString:model.face_img] placeholder:[UIImage imageNamed:@"basicPlaceholder"]];
        self.titleLab.text = model.nick_name;
        [self.titleLab sizeToFit];
        self.levelIV.hidden = NO;
        [self.levelIV yy_setImageWithURL:[NSURL URLWithString:model.level_img] placeholder:[UIImage imageNamed:@"level_img_placeholder"]];
        
        [self.titleLab mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.portraitIV.mas_right).offset(20);
            make.top.equalTo(self.portraitIV).offset(4);
            make.right.equalTo(self.modifyBtn.mas_left).offset(-20);
        }];
        [self.levelIV mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.titleLab).offset(-8);
            make.top.equalTo(self.titleLab.mas_bottom).offset(4);
            make.size.mas_equalTo(CGSizeMake(95, 35));
        }];
        self.openAIBtn.hidden = model.is_access == 1;
        self.reportReviewsView.hidden = !self.openAIBtn.hidden;
        self.scoreCountLab.text = [NSString stringWithFormat:@"我的积分:%d", model.total_points];
    } else {
        self.portraitIV.image = [UIImage imageNamed:@"basicPlaceholder"];
        self.titleLab.text = @"注册/登录";
        [self.titleLab sizeToFit];
        self.levelIV.hidden = YES;
        
        [self.titleLab mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.portraitIV.mas_right).offset(20);
            make.centerY.equalTo(self.portraitIV);
        }];
        
        self.openAIBtn.hidden = NO;
        self.reportReviewsView.hidden = YES;
        self.scoreCountLab.text = @"我的积分";
    }
}

- (void)scoreTaskAction:(UIButton *)sender {
    if (self.delegate && [self.delegate respondsToSelector:@selector(didClickScoreTaskBtn:)]) {
        [self.delegate didClickScoreTaskBtn:sender.tag];
    }
}

- (void)myDynAction {
    if (self.delegate && [self.delegate respondsToSelector:@selector(jumpToMyDynamicModule)]) {
        [self.delegate jumpToMyDynamicModule];
    }
}

#pragma mark - life
- (instancetype)initWithDelegate:(id<ProfileHeaderViewDelegate>)delegate {
    if (self = [super initWithFrame:CGRectMake(0, 0, 0, 0)]) {
        _delegate = delegate;
        
        [self mas_makeConstraints:^(MASConstraintMaker *make) {
            make.height.greaterThanOrEqualTo(@338);
            make.width.equalTo(@(kScreenWidth));
        }];
        
        UIView *userInfoView = [UIView new];
        [self addSubview:userInfoView];
        self.userInfoView = userInfoView;
        
        [self.userInfoView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.equalTo(self);
            make.height.equalTo(@172);
            make.top.left.right.equalTo(self);
        }];
        UILabel *meLab = [UILabel dkLabWithText:@"我的" font:BoldFont(24.0)];
        CGFloat meH = [NSString getHeightWithText:@"我的" withFont:BoldFont(24.0) withMaxWidth:100];
        [self.userInfoView addSubview:meLab];
        self.meLab = meLab;
        
        UIButton *myDynBtn = [UIButton new];
        [myDynBtn addTarget:self action:@selector(myDynAction) forControlEvents:UIControlEventTouchUpInside];
        [myDynBtn dk_setImage:DKImagePickerWithNames(@"ic_person_wodedongtai", @"dk_ic_person_wodedongtai", @"ic_person_wodedongtai") forState:UIControlStateNormal];
        [self.userInfoView addSubview:myDynBtn];
        
        UIButton *bgBtn = [UIButton new];
        [bgBtn addTarget:self action:@selector(modifyAction) forControlEvents:UIControlEventTouchUpInside];
        [self.userInfoView addSubview:bgBtn];
        
        UIImageView *portraitIV = [UIImageView new];
        [portraitIV cornerRadius:30];
        portraitIV.dk_alphaPicker = DKAlphaPickerWithAlphas(1.0, .5, .5);
        [bgBtn addSubview:portraitIV];
        self.portraitIV = portraitIV;
        
        UILabel *titleLab = [UILabel dkLabWithFont:BoldFont(16.0)];
        [bgBtn addSubview:titleLab];
        self.titleLab = titleLab;
        
        UIImageView *levelIV = [UIImageView new];
        [bgBtn addSubview:levelIV];
        self.levelIV = levelIV;
        
        UIButton *modifyBtn = [UIButton btnWithTitle:@"点击修改信息" font:SysFont(12)];
        modifyBtn.userInteractionEnabled = NO;
        [modifyBtn dk_setTitleColorPicker:DKColorPickerWithColors(BrandColor, SubNaviDarkColor, DSWhite) forState:UIControlStateNormal];
        [modifyBtn dk_setImage:DKImagePickerWithNames(@"ic_person_more_normal", @"dk_ic_person_more_normal", @"ic_person_more_normal") forState:UIControlStateNormal];
        [modifyBtn adjustLayoutWithType:UIButtonLayoutTypeLeftTitleRightImage midSpace:4 sizeToFit:YES];
        CGFloat width = modifyBtn.titleLabel.width + 30 + 4;
        [bgBtn addSubview:modifyBtn];
        self.modifyBtn = modifyBtn;
        
        [self.meLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(self).offset(kStatusBarHeight + 17);
            make.left.equalTo(self).offset(15);
            make.height.equalTo(@(meH));
        }];
        [myDynBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerY.equalTo(self.meLab);
            make.right.equalTo(self).offset(-15);
        }];
        [bgBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.right.bottom.equalTo(self.userInfoView);
            make.height.equalTo(@60);
        }];
        [self.portraitIV mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(bgBtn);
            make.left.equalTo(self).offset(23);
            make.width.height.equalTo(@60);
        }];
        [self.modifyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.right.equalTo(bgBtn).offset(-23);
            make.centerY.equalTo(self.portraitIV);
            make.width.equalTo(@(width));
        }];
        
        UIView *scoreTaskEvaluateView = [UIView new];
        [self addSubview:scoreTaskEvaluateView];
        self.scoreTaskEvaluateView = scoreTaskEvaluateView;
        
        UIButton *dailyTaskBtn = [self btnWithDKImagePicker:DKImagePickerWithNames(@"btn_person_meirirenwu", @"dk_btn_person_meirirenwu", @"btn_person_meirirenwu") tag:1];
        UIButton *myScoreBtn = [self btnWithDKImagePicker:DKImagePickerWithNames(@"btn_person_wodejifen", @"dk_btn_person_wodejifen", @"btn_person_wodejifen") tag:2];
        
        [self.scoreTaskEvaluateView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.equalTo(self);
            make.top.equalTo(self.userInfoView.mas_bottom);
            make.left.right.equalTo(self);
            make.bottom.equalTo(self).priorityHigh();
        }];
        CGFloat btn_width = (kScreenWidth - 30 - 13)/2.0;
        CGFloat btn_height = 62*btn_width/166.0;
        [dailyTaskBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.scoreTaskEvaluateView).offset(15);
            make.top.equalTo(self.scoreTaskEvaluateView).offset(19);
            make.right.equalTo(myScoreBtn.mas_left).offset(-13);
            make.height.equalTo(@(btn_height));
            make.size.equalTo(myScoreBtn);
        }];
        [myScoreBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.right.equalTo(self.scoreTaskEvaluateView).offset(-15);
            make.top.equalTo(dailyTaskBtn);
        }];
        
        CGFloat ai_btn_width = kScreenWidth - 30;
        CGFloat ai_btn_height = 62*ai_btn_width/345.0;
        [self.openAIBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.scoreTaskEvaluateView).offset(15);
            make.right.equalTo(self.scoreTaskEvaluateView).offset(-15);
            make.top.equalTo(dailyTaskBtn.mas_bottom).offset(18);
            make.height.equalTo(@(ai_btn_height));
            make.bottom.equalTo(self.scoreTaskEvaluateView).offset(-19);
        }];
        [self.reportReviewsView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(self.openAIBtn);
        }];
        
        // 更新布局
        [self layoutIfNeeded];
        
        [self updateUserView];
        
        // 监听用户数据更新通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateUserView) name:HasUpdateUserDataNoti object:nil];
        // 监听用户开启AI睡眠教练
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(monitorAIStartNoti) name:NeedUpdateStartAI object:nil];
    }
    return self;
}

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:HasUpdateUserDataNoti object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NeedUpdateStartAI object:nil];
}

#pragma mark - lazy
- (UIButton *)openAIBtn {
    if (!_openAIBtn) {
        _openAIBtn = [UIButton new];
        _openAIBtn.hidden = YES;
        [_openAIBtn dk_setImage:DKImagePickerWithNames(@"btn_person_kaitong", @"dk_btn_person_kaitong", @"btn_person_kaitong") forState:UIControlStateNormal];
        [_openAIBtn.imageView setContentMode:UIViewContentModeScaleAspectFill];
        _openAIBtn.contentHorizontalAlignment= UIControlContentHorizontalAlignmentFill;
        _openAIBtn.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
        _openAIBtn.tag = 3;
        [_openAIBtn addTarget:self action:@selector(scoreTaskAction:) forControlEvents:UIControlEventTouchUpInside];
        [self.scoreTaskEvaluateView addSubview:_openAIBtn];
        
        UILabel *titleLab = [UILabel labWithText:@"开通AI睡眠教练享专业报告与测评" font:(iPhone5 ? BoldFont(12.0) : BoldFont(14.0)) fit:YES];
        titleLab.dk_textColorPicker = DKColorPickerWithColors(MainTextColor, DkTitleColor, DSWhite);
        [_openAIBtn addSubview:titleLab];
        [titleLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.mas_equalTo(_openAIBtn).offset(12);
            make.centerY.equalTo(_openAIBtn);
        }];
        
        UILabel *openLab = [UILabel labWithText:@"去开通" textColor:DSWhite font:BoldFont(12.0)];
        openLab.textAlignment = NSTextAlignmentCenter;
        [openLab cornerRadius:12.0];
        openLab.backgroundColor = BrandColor;
        [_openAIBtn addSubview:openLab];
        [openLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.right.equalTo(_openAIBtn).offset(-12);
            make.centerY.equalTo(_openAIBtn);
            make.size.mas_equalTo(CGSizeMake(76, 24));
        }];
    }
    return _openAIBtn;
}

- (UIView *)reportReviewsView {
    if (!_reportReviewsView) {
        _reportReviewsView = [UIView new];
        _reportReviewsView.dk_backgroundColorPicker = DKColorPickerWithColors(DSWhite, ColorFromHex(0x2A314B), DSWhite);
        [_reportReviewsView cornerRadius:12.0];
        [self.scoreTaskEvaluateView addSubview:_reportReviewsView];
        
        UIButton *reportBtn = [UIButton btnWithTitle:@"我的睡眠报告" font:BoldFont(15.0)];
        reportBtn.tag = 4;
        reportBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 4, 0, 0);
        [reportBtn addTarget:self action:@selector(scoreTaskAction:) forControlEvents:UIControlEventTouchUpInside];
        [reportBtn dk_setTitleColorPicker:DKColorPickerWithColors(MainTextColor, DkTitleColor, DSWhite) forState:UIControlStateNormal];
        [reportBtn dk_setImage:DKImagePickerWithNames(@"sleep_report", @"dk_sleep_report", @"sleep_report") forState:UIControlStateNormal];
        [_reportReviewsView addSubview:reportBtn];
        
        UIView *line = [UIView new];
        line.dk_backgroundColorPicker = DKColorPickerWithColors(DivideLineColor, DarkColor, DSWhite);
        [_reportReviewsView addSubview:line];
        
        UIButton *reviewBtn = [UIButton btnWithTitle:@"我的睡眠测评" font:BoldFont(15.0)];
        reviewBtn.tag = 5;
        reviewBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 4, 0, 0);
        [reviewBtn addTarget:self action:@selector(scoreTaskAction:) forControlEvents:UIControlEventTouchUpInside];
        [reviewBtn dk_setTitleColorPicker:DKColorPickerWithColors(MainTextColor, DkTitleColor, DSWhite) forState:UIControlStateNormal];
        [reviewBtn dk_setImage:DKImagePickerWithNames(@"sleep_review", @"dk_sleep_review", @"sleep_review") forState:UIControlStateNormal];
        [_reportReviewsView addSubview:reviewBtn];
        
        [reportBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.left.bottom.equalTo(_reportReviewsView);
            make.right.equalTo(reviewBtn.mas_left);
        }];
        [reviewBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.right.bottom.equalTo(_reportReviewsView);
            make.size.equalTo(reportBtn);
        }];
        [line mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(_reportReviewsView).offset(11);
            make.bottom.equalTo(_reportReviewsView).offset(-11);
            make.width.equalTo(@1);
            make.center.equalTo(_reportReviewsView);
        }];
    }
    return _reportReviewsView;
}

#pragma mark - builders
- (UIButton *)btnWithDKImagePicker:(DKImagePicker)imgPicker tag:(NSInteger)tag {
    UIButton *btn = [UIButton new];
    btn.tag = tag;
    [btn dk_setImage:imgPicker forState:UIControlStateNormal];
    [btn.imageView setContentMode:UIViewContentModeScaleAspectFill];
    btn.contentHorizontalAlignment= UIControlContentHorizontalAlignmentFill;
    btn.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
    [btn addTarget:self action:@selector(scoreTaskAction:) forControlEvents:UIControlEventTouchUpInside];
    [self.scoreTaskEvaluateView addSubview:btn];
    
    UILabel *titleLab = [UILabel labWithText:(tag == 1 ? @"每日任务" : @"我的积分") font:BoldFont(15.0) fit:YES];
    titleLab.dk_textColorPicker = DKColorPickerWithColors(MainTextColor, DkTitleColor, DSWhite);
    [btn addSubview:titleLab];
    
    [titleLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(btn).offset(12);
        make.top.equalTo(btn).offset(10);
    }];
    
    if (tag == 1) {
        UILabel *tipsLab = [UILabel labWithText:@"做任务攒积分 >" textColor:BrandColor font:SysFont(8.0)];
        tipsLab.textAlignment = NSTextAlignmentCenter;
        [tipsLab cornerRadius:8.0];
        tipsLab.layer.borderWidth = .5;
        tipsLab.layer.borderColor = BrandColor.CGColor;
        [btn addSubview:tipsLab];
        [tipsLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(titleLab);
            make.bottom.equalTo(btn).offset(-10);
            make.size.mas_equalTo(CGSizeMake(65, 15));
        }];
    } else {
        UILabel *scoreCountLab = [UILabel labWithFont:SysFont(12.0)];
        scoreCountLab.dk_textColorPicker = DKColorPickerWithColors(SubTitleColor, DkTitleColor, DSWhite);
        [btn addSubview:scoreCountLab];
        self.scoreCountLab = scoreCountLab;
        [scoreCountLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(titleLab);
            make.bottom.equalTo(btn).offset(-10);
            make.right.equalTo(btn).offset(-62);
        }];
    }
    
    return btn;
}

@end