//
//  MPPositive_LoveSongsViewController.swift
//  MusicPlayer
//
//  Created by Mr.Zhou on 2024/5/28.
//

import UIKit

class MPPositive_LoveSongsViewController: MPPositive_BaseViewController, UIViewControllerTransitioningDelegate {
    ///广告View
    fileprivate lazy var adContainerView:UIView = {
        let adContainerView:UIView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: 300*width))
        adContainerView.backgroundColor = .clear
        return adContainerView
    }()
    private lazy var numbersLabel:UILabel = createLabel(font: .systemFont(ofSize: 18*width, weight: .regular), textColor: .white, textAlignment: .left)
    ///tableView
    private lazy var tableView:UITableView = {
        let tableView = UITableView(frame: .init(x: 0, y: 0, width: screen_Width, height: screen_Height), style: .plain)
        if #available(iOS 15.0, *) {
            tableView.sectionHeaderTopPadding = 0
        }
        tableView.backgroundColor = .clear
        tableView.separatorStyle = .none
        tableView.estimatedRowHeight = 200
        tableView.rowHeight = UITableView.automaticDimension
        tableView.dataSource = self
        tableView.delegate = self
        tableView.register(MPPositive_SearchResultShowTableViewCell.self, forCellReuseIdentifier: MPPositive_SearchResultShowTableViewCellID)
        tableView.contentInset = .init(top: 0, left: 0, bottom: 70*width, right: 0)
        return tableView
    }()
    private let MPPositive_SearchResultShowTableViewCellID = "MPPositive_SearchResultShowTableViewCell"
    override func viewDidLoad() {
        super.viewDidLoad()
        setTitle("Love Songs")
        setPopBtn()
        configure()
        MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 1)
        MP_AdMobManager.shared.onLibraryNativeAdBlock = {
            [weak adContainerView] in
            guard let adContainerView = adContainerView else {return}
            MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 1)
        }
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        reload()
    }
    //刷新列表
    private func reload() {
        MPPositive_LoadCoreModel.shared.reloadCollectionSongViewModel {
            [weak self] in
            guard let self = self else {return}
            tableView.showMessage(MPPositive_LoadCoreModel.shared.songViewModels.count, title: "No Songs")
            numbersLabel.text = "\(MPPositive_LoadCoreModel.shared.songViewModels.count) Songs"
            tableView.reloadData()
        }
    }
    private func configure() {
        view.addSubview(adContainerView)
        adContainerView.snp.makeConstraints { make in
            make.left.right.equalToSuperview()
            make.top.equalTo(navView.snp.bottom)
            make.height.equalTo(0)
        }
        view.addSubview(numbersLabel)
        numbersLabel.snp.makeConstraints { make in
            make.left.equalToSuperview().offset(18*width)
            make.top.equalTo(adContainerView.snp.bottom).offset(32*width)
        }
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.top.equalTo(numbersLabel.snp.bottom).offset(18*width)
            make.left.right.bottom.equalToSuperview()
        }
    }
}
//MARK: - tableView
extension MPPositive_LoveSongsViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return MPPositive_LoadCoreModel.shared.songViewModels.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: MPPositive_SearchResultShowTableViewCellID, for: indexPath) as! MPPositive_SearchResultShowTableViewCell
        cell.songViewModel = MPPositive_LoadCoreModel.shared.songViewModels[indexPath.row]
        cell.moreBlock = {
            [weak self] in
            guard let self = self else {return}
            MPPositive_Debouncer.shared.call {
                MPPositive_ModalType = .MoreOperations
                let moreVC = MPPositive_MoreSongOperationsViewController(MPPositive_LoadCoreModel.shared.songViewModels[indexPath.row])

                moreVC.disMissBlock = {
                    self.reload()
                }

                moreVC.transitioningDelegate = self
                moreVC.modalPresentationStyle = .custom
                self.present(moreVC, animated: true)
            }
        }
        cell.deleteBlock = {
            [weak self] in
            guard let self = self else {return}
            //点击删除下载
            let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert)
            let cancel = UIAlertAction(title: "Cancel", style: .cancel)
            alertController.addAction(cancel)
            let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in
                guard let videoId = MPPositive_LoadCoreModel.shared.songViewModels[indexPath.row].collectionSong.videoId else {return}
                //确定删除
                MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in
                    MP_HUD.progress("Loading...", delay: 0.5) {
                        MP_HUD.text("Removed", delay: 1.0, completion: nil)
                        tableView.reloadData()
                    }
                }
            }
            alertController.addAction(sure)
            present(alertController, animated: true)
        }
        cell.cancelBlock = {
            [weak self] in
            guard let self = self else {return}
            //点击取消下载
            let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert)
            let cancel = UIAlertAction(title: "Cancel", style: .cancel)
            alertController.addAction(cancel)
            let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in
                guard let videoId = MPPositive_LoadCoreModel.shared.songViewModels[indexPath.row].collectionSong.videoId else {return}
                //确定取消
                MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in
                    MP_HUD.text("Canceled", delay: 1.0, completion: nil)
                    tableView.reloadData()
                }
            }
            alertController.addAction(sure)
            present(alertController, animated: true)
        }
        return cell
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        MPPositive_Debouncer.shared.call {
            [weak self] in
            guard let self = self else {return}
            guard MP_NetWorkManager.shared.netWorkStatu == .reachable else {
                MP_HUD.text("Weak connection.", delay: 2.0, completion: nil)
                return
            }
            MP_AnalyticsManager.shared.song_clickAction("Love Song")
            //优先清除数据
            MP_PlayerManager.shared.loadPlayer = nil
            //弹出播放器
            NotificationCenter.notificationKey.post(notificationName: .pup_player_vc)
            MP_AnalyticsManager.shared.player_b_impAction()
            //将当前收藏音乐放入列表中
            var array:[MPPositive_SongItemModel] = []
            for (index,song) in MPPositive_LoadCoreModel.shared.songViewModels.enumerated() {
                let item = MPPositive_SongItemModel()
                //填补item数据
                item.index = index
                item.reviewUrls = [song.coverURL.absoluteString]
                item.title = song.title
                item.shortBylineText = song.subtitle
                item.videoId = song.collectionSong.videoId
                item.lyricsID = song.collectionSong.lyricsID
                item.relatedID = song.collectionSong.relatedID
                array.append(item)
            }
            let lodaViewModel = MPPositive_PlayerLoadViewModel(array, currentVideoId: MPPositive_LoadCoreModel.shared.songViewModels[indexPath.row].collectionSong.videoId ?? "")
            lodaViewModel.improveData(MPPositive_LoadCoreModel.shared.songViewModels[indexPath.row].collectionSong.videoId ?? "")
            //更改播放器播放类型
            MP_PlayerManager.shared.setPlayType(.normal)
            MP_PlayerManager.shared.loadPlayer = lodaViewModel
            MP_AnalyticsManager.shared.player_b_listAction()
        }
    }
    func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
        return MPPositive_PresentationController(presentedViewController: presented, presenting: presenting)
    }
}
