HomeViewController.m 7.5 KB
//
//  HomeViewController.m
//  DreamSleep
//
//  Created by peter on 2022/4/1.
//

#import "HomeViewController.h"
#import "DSHomeView.h"
#import "RescuePlanView.h"
#import "FirstLeadAlertView.h"
#import "UserRequestModel.h"
#import "HomeRequestModel.h"
#import "ThreeMinuteController.h"
#import "SafeSleepRequestModel.h"
#import "WhiteNoiseRequestModel.h"

@interface HomeViewController ()
@property (nonatomic, strong) DSHomeView *homeTV;
@property (nonatomic, strong) RescuePlanView *rescuePlanView;
@end

@implementation HomeViewController

- (void)loadView {
    self.view = self.homeTV;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // leftItem
    UILabel *leftLab = [UILabel dkLabWithText:@"小梦睡眠" font:BoldFont(24.0)];
    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:leftLab];
    self.navigationItem.leftBarButtonItem = leftItem;
    
    if ([LoginUtils getUserLoginData]) {
        // 自动登录请求(调用时机)
        [UserRequestModel autoLoginRequestWithCompletion:^(UserRequestModel * _Nonnull requestModel) {}];
    }
    
    // 活动运营弹框(首次启动不弹框,后面每隔24个小时请求后台接口)
    [self promotionAlert];
    // APP首次启动弹框(只出现一次)
    [self showFirstLeadAlertView];
    
    [self requestHomeData];
    
    // 监听主页需要刷新数据通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(needUpdate) name:NeedUpdateHomePage object:nil];
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    
    dispatch_async(dispatch_get_main_queue(), ^{
        self.homeTV.frame = CGRectMake(0, kTopHeight(0), kScreenWidth, kScreenHeight - kTopHeight(0) - kTabBarHeight);
    });
}

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

- (void)needUpdate {
    [self.homeTV.mj_header beginRefreshing];
}

#pragma mark - banner、舒眠课程、助眠音乐数据获取
- (void)requestHomeData {
    self.homeTV.mj_header = [DSGifHeader headerWithRefreshingBlock:^{
        // 获取首页banner数据
        [HomeRequestModel queryBannerListWithCompletion:^(HomeRequestModel * _Nonnull requestModel) {
            [self.homeTV.mj_header endRefreshing];
            if (requestModel.resCode == DSResCodeSuccess) {
                [self.homeTV refreshBarnner:requestModel.bannerListData];
            }
        }];
        // 获取首页舒眠课程数据
        [SafeSleepRequestModel getCourseListDataWithSubID:6 isHome:YES completion:^(SafeSleepRequestModel * _Nonnull requestModel) {
            [self.homeTV.mj_header endRefreshing];
            if (requestModel.resCode == DSResCodeSuccess) {
                [self.homeTV updateCourseMusicCell:CellTypeCourse data:requestModel.courseListData];
            }
        }];
        // 获取首页助眠音乐数据
        [SafeSleepRequestModel getCourseListDataWithSubID:18 isHome:YES completion:^(SafeSleepRequestModel * _Nonnull requestModel) {
            [self.homeTV.mj_header endRefreshing];
            if (requestModel.resCode == DSResCodeSuccess) {
                [self.homeTV updateCourseMusicCell:CellTypeMusic data:requestModel.courseListData];
            }
        }];
        // 获取白噪音类型请求
        [WhiteNoiseRequestModel queryRelaxWhiteNoiseTypeWithCompletion:^(WhiteNoiseRequestModel * _Nonnull requestModel) {
            [self.homeTV.mj_header endRefreshing];
            if (requestModel.resCode == DSResCodeSuccess) {
                [self.homeTV updateNoiseAllTypeData:requestModel.noiseTypeArr];
            }
        }];
    }];
    [self.homeTV.mj_header beginRefreshing];
}

#pragma mark - APP首次启动弹框
- (void)showFirstLeadAlertView {
    if (kGetUserDefaultsBOOL(IsFirstAlert)) { return; }
    FirstLeadAlertView *view = [[FirstLeadAlertView alloc] initWithJumpBlock:^(JumpType type) {
        if (type == JumpTypeAI) {
            // 切换到AI睡眠教练标签
            self.tabBarController.selectedIndex = 1;
        } else {
            // 进入快速入眠页面(首页)
            self.tabBarController.selectedIndex = 0;
        }
    }];
    [view show];
}

#pragma mark - 运营活动相关
- (void)promotionAlert {
    if (kGetUserDefaultsBOOL(IsFirstAlert) == NO) {
        return;
    }
    
    if ([[NSFileManager defaultManager] fileExistsAtPath:kPromotionTime isDirectory:nil]) {
        // 缓存文件最近修改日期
        NSDictionary *fileURLAttributes = [[NSURL fileURLWithPath:kPromotionTime] resourceValuesForKeys:[NSArray arrayWithObjects:NSURLContentModificationDateKey, nil] error:nil];
        NSDate *lastModifiedDate = [fileURLAttributes objectForKey:NSURLContentModificationDateKey];
        // 活动更新时效24小时
        NSInteger updateTime = 60 * 60 * 24;
        NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-updateTime];
        NSComparisonResult result = [expirationDate compare:lastModifiedDate];
        // 运营活动弹框时机(每天调用1次)
        if (result == NSOrderedDescending) {
            [self queryPromotionImageRequest];
        }
    } else {
        [self queryPromotionImageRequest];
    }
}

- (void)queryPromotionImageRequest {
    [HomeRequestModel queryPromotionImageWithCompletion:^(HomeRequestModel * _Nonnull requestModel) {
        if (requestModel.resCode == DSResCodeSuccess) {
            PromotionModel *pModel = requestModel.promotionModel;
            if (pModel) { [self showRescuePlanView:pModel]; }
        }
    }];
}

- (void)showRescuePlanView:(PromotionModel *)pModel {
    RescuePlanView *rescuePlanView = [[RescuePlanView alloc] initWithJumpBlock:^{
        if (pModel.login_flag == 1) { // 需要用户登录才可以点击进入相应界面
            // 判断是否登录成功
            if ([LoginUtils getUserLoginData]) {
                [self jumpToActiveInterface:pModel];
            } else {
                // 跳转到登录页面
                [LoginUtils jumpToLoginControllerWithTarget:self];
            }
        } else { // 不需要登录也可以进入相应界面
            [self jumpToActiveInterface:pModel];
        }
    } imageUrl:pModel.image_url];
    self.rescuePlanView = rescuePlanView;
    [self.rescuePlanView show];
}

- (void)jumpToActiveInterface:(PromotionModel *)pModel {
    [self.rescuePlanView dismiss];
    WS(weakSelf);
    BOOL isNative = [pModel.page_url containsString:@"native"];
    // 跳转到原生页面
    if (isNative) {
        int type = [[[pModel.page_url componentsSeparatedByString:@"type="] lastObject] intValue];
        if (type == 1) { // AI睡眠教练
            // 切换到AI睡眠教练标签
            self.tabBarController.selectedIndex = 1;
        } else if (type == 2) { // 首页
            self.tabBarController.selectedIndex = 0;
        } else if (type == 3) { // 哄睡页面(未登录就可以进去)
            ThreeMinuteController *threeVC = [[ThreeMinuteController alloc] init];
            [self.navigationController pushViewController:threeVC animated:YES];
        }
    } else {
        // 跳转到H5页面
        [weakSelf.navigationController pushViewController:[[DsWebController alloc] initWithTitle:pModel.title link:pModel.page_url] animated:YES];
    }
}

#pragma mark - 导航栏日间、黑夜模式
- (NaviStyle)navigationBarStyle {
    return [self.dk_manager.themeVersion isEqualToString:DKThemeVersionNormal] ? NaviStyleLight : NaviStyleDark;
}

#pragma mark - lazy
- (DSHomeView *)homeTV {
    if (!_homeTV) {
        _homeTV = [[DSHomeView alloc] init];
    }
    return _homeTV;
}

@end