Fableon/Fableon/Object/Class/Player/V/FAOldVideoRechargeView.swift
2025-10-29 10:26:27 +08:00

291 lines
9.3 KiB
Swift

//
// FAOldVideoRechargeView.swift
// Fableon
//
// Created by on 2025/10/28.
//
import UIKit
import HWPanModal
class FAOldVideoRechargeView: FAPanModalContentView {
var buyFinishHandle: (() -> Void)?
var model: FAPayDateModel? {
didSet {
self.stackView.fa_removeAllArrangedSubview()
self.vipView.dataArr = model?.list_sub_vip ?? []
self.coinsView.setDataArr(model?.list_coins ?? [])
if let sort = model?.sort, sort.count > 0 {
sort.forEach {
if $0 == .vip, model?.list_sub_vip?.isEmpty == false {
self.stackView.addArrangedSubview(self.vipView)
} else if $0 == .coin, model?.list_coins?.isEmpty == false {
self.stackView.addArrangedSubview(self.coinsView)
}
}
} else {
if model?.list_sub_vip?.isEmpty == false {
self.stackView.addArrangedSubview(self.vipView)
}
if model?.list_coins?.isEmpty == false {
self.stackView.addArrangedSubview(self.coinsView)
}
}
// self.stackView.addArrangedSubview(self.tipView)
self.setNeedsLayoutUpdate()
}
}
var videoInfo: FAVideoInfoModel? {
didSet {
self.coinsView.videoId = videoInfo?.short_play_video_id
self.coinsView.shortPlayId = videoInfo?.short_play_id
self.vipView.videoId = videoInfo?.short_play_video_id
self.vipView.shortPlayId = videoInfo?.short_play_id
videoCoinsView.coins = videoInfo?.coins ?? 0
self.requestRestore()
}
}
private lazy var closeButton: UIButton = {
let button = UIButton(type: .custom, primaryAction: UIAction(handler: { [weak self] _ in
guard let self = self else { return }
FAStatAPI.requestEventStat(orderCode: nil, shortPlayId: self.videoInfo?.short_play_id, videoId: self.videoInfo?.short_play_video_id, eventKey: .payTemplateDialog, errorMsg: nil, otherParamenters: [
"event_name" : "pay cancel"
])
Task {
await self.dismiss(animated: true)
}
}))
button.setImage(UIImage(named: "close_icon_02"), for: .normal)
return button
}()
private lazy var scrollView: FAScrollView = {
let scrollView = FAScrollView()
scrollView.clipsToBounds = false
return scrollView
}()
private lazy var stackView: UIStackView = {
let view = UIStackView()
view.axis = .vertical
view.spacing = 18
return view
}()
private lazy var coinsView: FAStoreCoinsView = {
let view = FAStoreCoinsView()
view.buyFinishHandle = { [weak self] in
self?.buyFinishHandle?()
Task {
await self?.dismiss(animated: true)
}
}
return view
}()
private lazy var vipView: FAStoreVipView = {
let view = FAStoreVipView()
view.buyFinishHandle = { [weak self] in
self?.buyFinishHandle?()
Task {
await self?.dismiss(animated: true)
}
}
return view
}()
private lazy var videoCoinsView: FAOldVideoRechargeView.CoinsView = {
let view = FAOldVideoRechargeView.CoinsView()
view.title = "Price".localized + ":"
return view
}()
private lazy var totalCoinsView: FAOldVideoRechargeView.CoinsView = {
let view = FAOldVideoRechargeView.CoinsView()
view.title = "Balance".localized + ":"
view.coins = FALogin.manager.userInfo?.totalCoins ?? 0
return view
}()
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.font = .font(ofSize: 12, weight: .medium)
label.textColor = .FFFFFF
label.text = "store_title_1".localized
return label
}()
deinit {
NotificationCenter.default.removeObserver(self)
}
override init(frame: CGRect) {
super.init(frame: frame)
NotificationCenter.default.addObserver(self, selector: #selector(userInfoUpdateNotification), name: FALogin.userInfoUpdateNotification, object: nil)
self.contentHeight = UIScreen.height - UIScreen.safeTop
// self.backgroundColor = ._000000.withAlphaComponent(0.6)
self.backgroundColor = .clear
self.mainScrollView = self.scrollView
fa_setupLayout()
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc private func userInfoUpdateNotification() {
totalCoinsView.coins = FALogin.manager.userInfo?.totalCoins ?? 0
}
override func present(in view: UIView?) {
super.present(in: view)
self.hw_contentView.fa_addEffectView(style: .dark)
self.hw_contentView.fa_setRoundedCorner(topLeft: 24, topRight: 24, bottomLeft: 0, bottomRight: 0)
}
override func allowsTapBackgroundToDismiss() -> Bool {
return false
}
}
extension FAOldVideoRechargeView {
private func fa_setupLayout() {
addSubview(closeButton)
addSubview(videoCoinsView)
addSubview(totalCoinsView)
addSubview(titleLabel)
addSubview(scrollView)
scrollView.addSubview(stackView)
closeButton.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-16)
make.top.equalToSuperview().offset(12)
}
videoCoinsView.snp.makeConstraints { make in
make.centerY.equalTo(closeButton)
make.left.equalToSuperview().offset(16)
}
totalCoinsView.snp.makeConstraints { make in
make.centerY.equalTo(closeButton)
make.left.equalTo(videoCoinsView.snp.right).offset(15)
}
titleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.top.equalToSuperview().offset(39)
}
scrollView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalToSuperview().offset(74)
make.bottom.equalToSuperview()
}
stackView.snp.makeConstraints { make in
make.left.centerX.equalToSuperview()
make.top.equalToSuperview()
make.bottom.equalToSuperview().offset(-(UIScreen.safeBottom + 10))
}
}
}
extension FAOldVideoRechargeView {
@objc private func requestRestore() {
guard let shortPlayId = self.videoInfo?.short_play_id, let videoId = self.videoInfo?.short_play_video_id else { return }
FAIapManager.manager.restore(isLoding: false, shortPlayId: shortPlayId, videoId: videoId) { [weak self] isFinish, buyType in
if isFinish {
FALogin.manager.requestUserInfo(completer: nil)
self?.buyFinishHandle?()
Task {
await self?.dismiss(animated: true)
}
}
}
}
}
extension FAOldVideoRechargeView {
class CoinsView: UIView {
var title: String? {
didSet {
titleLabel.text = title
}
}
var coins: Int = 0 {
didSet {
coinsLabel.text = "\(coins)"
}
}
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.font = .font(ofSize: 14, weight: .regular)
label.textColor = .FFFFFF
return label
}()
private lazy var iconImageView: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "coins_icon_08"))
return imageView
}()
private lazy var coinsLabel: UILabel = {
let label = UILabel()
label.font = .font(ofSize: 14, weight: .bold)
label.textColor = .F_9_F_494
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(titleLabel)
addSubview(iconImageView)
addSubview(coinsLabel)
titleLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.bottom.lessThanOrEqualToSuperview()
make.left.equalToSuperview()
}
iconImageView.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.bottom.lessThanOrEqualToSuperview()
make.left.equalTo(titleLabel.snp.right).offset(6)
}
coinsLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.bottom.lessThanOrEqualToSuperview()
make.left.equalTo(iconImageView.snp.right).offset(4)
make.right.equalToSuperview()
}
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
}