//
//  MPPositive_BottomShowView.swift
//  MusicPlayer
//
//  Created by Mr.Zhou on 2024/4/19.
//

import UIKit
import Kingfisher
///b面底部播放音乐展示View
class MPPositive_BottomShowView: UIView {
    //绿色背景图片
    private lazy var bgGreenImageView:UIImageView = UIImageView(image: .init(named: "BottomShow'bg"))
    //音乐封面展示圆框
    private lazy var coverImageView:UIImageView = {
        let imageView:UIImageView = .init(frame: .init(x: 26*width, y: 13*width, width: 48*width, height: 48*width))
        imageView.contentMode = .scaleAspectFill
        imageView.layer.cornerRadius = 24*width
        imageView.layer.masksToBounds = true
        return imageView
    }()
    //标题Label
    private lazy var titleLabel:UILabel = createLabel(font: .systemFont(ofSize: 16*width, weight: .semibold), textColor: .init(hex: "#000000"), textAlignment: .left)
    //副标题（歌手/专辑/乐队）
    private lazy var subtitleLabel:UILabel = createLabel(font: .systemFont(ofSize: 12*width, weight: .light), textColor: .init(hex: "#000000"), textAlignment: .left)
    //音乐列表按钮
    private lazy var listsBtn:UIButton = {
        let btn = UIButton()
        btn.setBackgroundImage(UIImage(named: "Bottom Lists'logo"), for: .normal)
        btn.addTarget(self, action: #selector(expandListsClick(_ :)), for: .touchUpInside)
        return btn
    }()
    //音乐播放器状态按钮
    private lazy var playStatuBtn:UIButton = {
        let btn = UIButton()
        btn.setBackgroundImage(UIImage(named: "Bottom Pause'logo"), for: .normal)
        btn.setBackgroundImage(UIImage(named: "Bottom Play'logo"), for: .selected)
        btn.addTarget(self, action: #selector(switchStatuClick(_ :)), for: .touchUpInside)
        return btn
    }()
    //展开音乐播放列表
    var showListBlock:(() -> Void)?
    override init(frame: CGRect) {
        super.init(frame: frame)
        //添加一个监听
        NotificationCenter.notificationKey.add(observer: self, selector: #selector(currentVideoSwitchAction(_:)), notificationName: .positive_player_reload)
        NotificationCenter.notificationKey.add(observer: self, selector: #selector(statusSwitchAction(_:)), notificationName: .switch_player_status)
        confirgue()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
    deinit {
        NotificationCenter.default.removeObserver(self)
    }
    //配置
    private func confirgue() {
        addSubview(bgGreenImageView)
        bgGreenImageView.snp.makeConstraints { make in
            make.left.right.top.bottom.equalToSuperview()
        }
        addSubview(coverImageView)
        addSubview(listsBtn)
        listsBtn.snp.makeConstraints { make in
            make.right.equalToSuperview().offset(-24*width)
            make.top.equalToSuperview().offset(21*width)
            make.height.width.equalTo(32*width)
        }
        addSubview(playStatuBtn)
        playStatuBtn.snp.makeConstraints { make in
            make.width.height.equalTo(24*width)
            make.centerY.equalTo(listsBtn)
            make.right.equalTo(listsBtn.snp.left).offset(-20*width)
        }
        addSubview(titleLabel)
        titleLabel.snp.makeConstraints { make in
            make.top.equalTo(coverImageView).offset(5*width)
            make.left.equalTo(coverImageView.snp.right).offset(12*width)
            make.right.equalTo(playStatuBtn.snp.left).offset(-10*width)
        }
        addSubview(subtitleLabel)
        subtitleLabel.snp.makeConstraints { make in
            make.left.equalTo(titleLabel)
            make.top.equalTo(titleLabel.snp.bottom).offset(4*width)
            make.right.equalTo(titleLabel)
        }
    }
    //切换当前播放音乐时会触发
    @objc private func currentVideoSwitchAction(_ sender:Notification) {
        //更新显示的内容
        DispatchQueue.main.async {
            [weak self] in
            guard let self = self else {return}
            if MP_PlayerManager.shared.loadPlayer?.currentVideo != nil {
                //存在当前播放音乐，更新显示
                coverImageView.kf.setImage(with: MP_PlayerManager.shared.loadPlayer?.currentVideo.coverUrl, placeholder: placeholderImage)
                titleLabel.text = MP_PlayerManager.shared.loadPlayer?.currentVideo?.title ?? ""
                subtitleLabel.text = MP_PlayerManager.shared.loadPlayer?.currentVideo.subtitle ?? ""
            }
        }
    }
    //切换播放器状态时
    @objc private func statusSwitchAction(_ sender:Notification) {
        if sender.object != nil {
            let state:MP_PlayerStateType = sender.object as! MP_PlayerStateType
            DispatchQueue.main.async {
                [weak self] in
                switch state {
                case .Playing:
                    self?.playStatuBtn.isSelected = true
                default:
                    self?.playStatuBtn.isSelected = false
                }
            }
        }
    }
    //展开当前音乐列表
    @objc private func expandListsClick(_ sender:UIButton) {
        guard showListBlock != nil else {
            return
        }
        showListBlock!()
    }
    //切换播放音乐状态
    @objc private func switchStatuClick(_ sender:UIButton) {
        guard MP_PlayerManager.shared.loadPlayer != nil else {
            return
        }
        //在当前音乐填充好之前，禁止触发点击
        switch MP_PlayerManager.shared.getPlayState() {
        case .Null:
            //启动播放
            MP_PlayerManager.shared.play()
        case .Playing:
            //播放中，进入暂停
            MP_PlayerManager.shared.pause {
                [weak self] in
            }
        case .Pause:
            //暂停中，进入继续
            MP_PlayerManager.shared.resume {
                [weak self] in
            }
        }
    }
}
