CNUpSlideViewController.swift 10.5 KB
//
//  CNUpSlideViewController.swift
//  metaCode
//
//  Created by zx on 2023/10/13.
//  下滑页原生页-首页

import Foundation
import UIKit

//下滑tableview背景颜色
let kCNDownSlideBackgroundColorHex: String = "#F7F8FA"

///CNliveDownSlideModel Type
let SlideModelTypeRecommend4: String = "4"//4一排两个 推荐课程&推荐活动
let SlideModelTypeTodayRecommend74: String = "74"//74今日推荐
let SlideModelTypeAllCourse12: String = "12"//12列表全部课程
let SlideModelTypeOneCourse75: String = "75"//75单课程大图

class CNUpSlideViewController: CNLiveBaseViewController,UITableViewDelegate,UITableViewDataSource{
    
    let kCNLiveDownSlideAllCourseCellIdentifier = "kCNLiveDownSlideAllCourseCellIdentifier"
    let kCNLiveDownSlideRecommendCellIdentifier = "kCNLiveDownSlideRecommendCellIdentifier"
    let kCNLiveDownSlideTodayRecommendCellIdentifier = "kCNLiveDownSlideTodayRecommendCellIdentifier"
    let kCNLiveDownSlideSingleCourseCellIdentifier = "kCNLiveDownSlideSingleCourseCellIdentifier"
    
    var totolNum = 0//一共显示多少行cell
    
    var selectedCell: CNDownSlideSingleCourseCell?
    
    var statusBarShouldBeHidden = false
    //we need to set `View controller-based status bar appearance = YES` in info.plist.
    //so we can be able to hide statusBar.
    override var prefersStatusBarHidden: Bool {
        return statusBarShouldBeHidden
    }
    
    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return .slide
    }
    
    var _downPath:String?
    var downPath:String? {
        get{
            return _downPath
        }
        set{
            _downPath = newValue!
            self.getPageApi()
        }
    }
    
    // MARK: - 懒加载
    ///数据源
    lazy var dataArray: NSMutableArray = {
        var dataArray = NSMutableArray()
        return dataArray
    }()
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.updateStatusBarAndTabbarFrame(visible: true)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = HexColor(kCNDownSlideBackgroundColorHex)
        view.addSubview(tableView)
        tableView.frame = CGRect(x: 0, y: KStatusBarHeight, width: KSreenWidth, height: KSreenHeight-DownSlideBottomViewHeight-KStatusBarHeight)
    }

    lazy var tableView : UITableView = {
        let tableView = UITableView(frame: .zero, style: .plain)
        tableView.dataSource = self
        tableView.delegate = self
        tableView.separatorStyle = .none
        tableView.bounces = false
//        tableView.register(CNDownSlideSingleCourseCell.self, forCellReuseIdentifier: kCNLiveDownSlideCellIdentifier)
        tableView.register(CNLiveDownSlideRecommendCell.self, forCellReuseIdentifier: kCNLiveDownSlideRecommendCellIdentifier)
        tableView.register(CNLiveDownSlideTodayRecommendCell.self, forCellReuseIdentifier: kCNLiveDownSlideTodayRecommendCellIdentifier)
        tableView.register(CNDownSlideSingleCourseCell.self, forCellReuseIdentifier: kCNLiveDownSlideAllCourseCellIdentifier)
        tableView.register(CNDownSlideSingleCourseCell.self, forCellReuseIdentifier:kCNLiveDownSlideSingleCourseCellIdentifier)
        tableView.backgroundColor = HexColor(kCNDownSlideBackgroundColorHex)
        return tableView
    }()
    
    private func updateStatusBarAndTabbarFrame(visible: Bool) {
        statusBarShouldBeHidden = !visible
        UIView.animate(withDuration: 0.25) {
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }

    // MARK: - UITableViewDelegate
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        self.dataArray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                
        let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
        
        //type=4一排两个 推荐课程&推荐活动; 74今日推荐; 12列表全部课程; 75单课程大图
        if slideModel.type == SlideModelTypeRecommend4{
            guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideRecommendCellIdentifier) as? CNLiveDownSlideRecommendCell 
            else {
                return CNLiveDownSlideRecommendCell()
            }
            cell.slideModel = slideModel
            return cell
        }else if slideModel.type == SlideModelTypeTodayRecommend74{
            guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideTodayRecommendCellIdentifier) as? CNLiveDownSlideTodayRecommendCell 
            else {
                let cell = CNLiveDownSlideTodayRecommendCell()
                cell.slideModel = slideModel
                return cell
            }
            cell.slideModel = slideModel
            return cell
        }else if slideModel.type == SlideModelTypeAllCourse12{
            guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideAllCourseCellIdentifier) as? CNDownSlideSingleCourseCell
            else {
                let cell = CNDownSlideSingleCourseCell()
                cell.slideModel = slideModel
                return cell
            }
            cell.slideModel = slideModel
            return cell
        }else if slideModel.type == SlideModelTypeOneCourse75{
            guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideSingleCourseCellIdentifier) as? CNDownSlideSingleCourseCell
            else {
                let cell = CNDownSlideSingleCourseCell()
                cell.slideModel = slideModel
                return cell
            }
            cell.slideModel = slideModel
            return cell
        }else{
            return UITableViewCell()
        }
    }
    
    
    func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) {
        guard let row = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
        UIView.animate(withDuration: 0.1) {
            row.bgBackView.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
        }
    }
    
    func tableView(_ tableView: UITableView, didUnhighlightRowAt indexPath: IndexPath) {
        guard let row = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
        UIView.animate(withDuration: 0.3) {
            row.bgBackView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
        }
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
        let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
        var cellType:CNLiveHomePageCellType = .course
        ///model
        ///(1) 1,2时跳转:sharelUrl后面拼接 ?contentId=contentId&videoId=pid
        ///(2) 3,4时跳转:thirdUrl
        ///(3)“album”,“album_video”,“album_ugc” -> http://wjjh5.cnlive.com/cnYmAlbumVideoList.html?aid=contentId&title=titlle
        if slideModel.contents.first?.model ?? "0" == "1" || slideModel.contents.first?.model ?? "0" == "2" || slideModel.contents.first?.model ?? "0" == "3" || slideModel.contents.first?.model ?? "0" == "4"{
            cellType = .course
        }else if slideModel.contents.first?.model ?? "0" == "album_ugc"{
            cellType = .playlet
        }else{
            //新类型
        }

        //type=4一排两个 推荐课程&推荐活动; 74今日推荐; 12列表全部课程; 75单课程大图
        if slideModel.type == SlideModelTypeRecommend4{
            
        }else if slideModel.type == SlideModelTypeTodayRecommend74{
            
        }else if slideModel.type == SlideModelTypeAllCourse12{
            guard let cell = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
            selectedCell = cell
            let detailVC = CNSlideBaseNavigationController(rootViewController: CNUpSlideDetailViewController(cell: cell,slideModel: slideModel, cellType: cellType), cellType: cellType)
            detailVC.dismissClosure = { [weak self] in
                guard let StrongSelf = self else { return }
                StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
            }
            updateStatusBarAndTabbarFrame(visible: false)
            present(detailVC, animated: true, completion: nil)
        }else if slideModel.type == SlideModelTypeOneCourse75{
            guard let cell = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
            selectedCell = cell
            
            let detailVC = CNSlideBaseNavigationController(rootViewController: CNUpSlideDetailViewController(cell: cell,slideModel: slideModel, cellType: cellType), cellType: cellType)
            
            detailVC.dismissClosure = { [weak self] in
                guard let StrongSelf = self else { return }
                StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
            }
            updateStatusBarAndTabbarFrame(visible: false)
            present(detailVC, animated: true, completion: nil)
        }
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
        return CGFloat(slideModel.cellH)
    }
    
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 0
    }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 0
    }
    //MARK: - 网络请求获取详情页
    func getPageApi()
    {
//        showLoading(message: "")
        CNLiveDownSlideViewModel.requestGetPage(pageId: _downPath! as NSString) { result, status in
            hiddenLoading()
            
            if status == .success{
                self.dataArray.removeAllObjects()
                let array = result as! [Any]
                let newDataArray = NSMutableArray()
                for slideModel in array {
                    if let model = slideModel as? CNLiveDownSlideModel{
                        
                         let layout = CNLiveDownSlideModelLayout.init(model: model)
                        newDataArray.addObjects(from: [layout.getCellHModel()])
                    }
                }
                self.dataArray.addObjects(from: newDataArray as! [Any])
                
                self.tableView.reloadData()
            }else if (status == .failed){
//                self.NetApiStatus = .apiError
            }else if (status == .noNetwork){
                
//                self.NetApiStatus = .notNetwork
            }
        }
//
    }
}