// // KMUserInfoViewController.swift // PDF Reader Pro // // Created by wanjun on 2024/10/30. // import Cocoa import Combine @objcMembers class KMUserInfoViewController: NSViewController { @IBOutlet weak var userImageView: NSImageView! @IBOutlet weak var emailLabel: NSTextField! @IBOutlet weak var productLabel: NSTextField! @IBOutlet weak var membershipLabel: NSTextField! @IBOutlet weak var lockedBackgroud: NSImageView! @IBOutlet weak var lockedImageView: NSImageView! @IBOutlet weak var lockedLabel: NSTextField! @IBOutlet weak var centerBackgroud: NSImageView! @IBOutlet weak var rightsBox: NSBox! @IBOutlet var rightsView: NSView! @IBOutlet weak var number1Label: NSTextField! @IBOutlet weak var number1ImageView: NSImageView! @IBOutlet weak var number2Label: NSTextField! @IBOutlet weak var iconBox: NSBox! @IBOutlet var iconView1: NSView! @IBOutlet weak var icon1ImageView: NSImageView! @IBOutlet weak var icon2ImageView: NSImageView! @IBOutlet weak var icon3ImageView: NSImageView! @IBOutlet weak var icon4ImageView: NSImageView! @IBOutlet var iconView2: NSView! @IBOutlet weak var icon5ImageView: NSImageView! @IBOutlet weak var icon6ImageView: NSImageView! @IBOutlet weak var icon7ImageView: NSImageView! @IBOutlet var iconView3: NSView! @IBOutlet weak var icon8ImageView: NSImageView! @IBOutlet weak var icon9ImageView: NSImageView! @IBOutlet var iconView4: NSView! @IBOutlet weak var icon10ImageView: NSImageView! @IBOutlet weak var number3Label: NSTextField! @IBOutlet weak var number4Label: NSTextField! @IBOutlet weak var number5Label: NSTextField! @IBOutlet weak var buyBox: NSBox! @IBOutlet var buyView1: NSView! @IBOutlet weak var buyNow1Box: KMBox! @IBOutlet weak var buyNow1ImageView: NSImageView! @IBOutlet weak var buyNow1Label: NSTextField! @IBOutlet weak var arrow1ImageView: NSImageView! @IBOutlet weak var buyNow2Box: KMBox! @IBOutlet weak var buyNow2ImageView: NSImageView! @IBOutlet weak var buyNow2Label: NSTextField! @IBOutlet weak var arrow2ImageView: NSImageView! @IBOutlet var buyView2: NSView! @IBOutlet weak var buyNow3Box: KMBox! @IBOutlet weak var buyNow3ImageView: NSImageView! @IBOutlet weak var buyNow3Label: NSTextField! @IBOutlet weak var arrow3ImageView: NSImageView! @IBOutlet weak var accountCenterBox: KMBox! @IBOutlet weak var accountImageView: NSImageView! @IBOutlet weak var accountLabel: NSTextField! @IBOutlet weak var signOutBox: KMBox! @IBOutlet weak var signOutImageView: NSImageView! @IBOutlet weak var signOutLabel: NSTextField! @IBOutlet weak var closeAccountBox: KMBox! @IBOutlet weak var closeAccountImageView: NSImageView! @IBOutlet weak var closeAccountLabel: NSTextField! private var viewModel = KMUserInfoVCModel() private var cancellables = Set() private var userState: KMUserState = .unPay_UnTrial override func viewDidLoad() { super.viewDidLoad() // Do view setup here. self.view.wantsLayer = true self.view.layer?.backgroundColor = .white userState = viewModel.refreshUserState() bindViewModel() languageLocalized() initializeUI() } // MARK: Private Method private func languageLocalized() -> Void { emailLabel.stringValue = KMMemberInfo.shared.userEmail productLabel.stringValue = NSLocalizedString("PDF Reader Pro Account", tableName: "MemberCenterLocalizable", comment: "") membershipLabel.stringValue = NSLocalizedString("Membership Benefits", tableName: "MemberCenterLocalizable", comment: "") lockedLabel.stringValue = NSLocalizedString("Locked", tableName: "MemberCenterLocalizable", comment: "") buyNow1Label.stringValue = NSLocalizedString("Buy Now", tableName: "MemberCenterLocalizable", comment: "") buyNow2Label.stringValue = NSLocalizedString("Buy Now", tableName: "MemberCenterLocalizable", comment: "") buyNow3Label.stringValue = NSLocalizedString("Upgrade", tableName: "MemberCenterLocalizable", comment: "") accountLabel.stringValue = NSLocalizedString("Account Center", tableName: "MemberCenterLocalizable", comment: "") signOutLabel.stringValue = NSLocalizedString("Sign out", tableName: "MemberCenterLocalizable", comment: "") closeAccountLabel.stringValue = NSLocalizedString("Close account", tableName: "MemberCenterLocalizable", comment: "") if userState == .unPay_UnTrial { number1Label.stringValue = NSLocalizedString("150+", tableName: "MemberCenterLocalizable", comment: "") number2Label.stringValue = NSLocalizedString("Benefits of functions", tableName: "MemberCenterLocalizable", comment: "") number3Label.stringValue = NSLocalizedString("All-platform available", tableName: "MemberCenterLocalizable", comment: "") number4Label.stringValue = NSLocalizedString("4 devices", tableName: "MemberCenterLocalizable", comment: "") number5Label.stringValue = NSLocalizedString("Devices Access", tableName: "MemberCenterLocalizable", comment: "") } else if userState == .permanentAccount { number1Label.stringValue = NSLocalizedString("", tableName: "MemberCenterLocalizable", comment: "") number2Label.stringValue = NSLocalizedString("Advanced Version", tableName: "MemberCenterLocalizable", comment: "") number3Label.stringValue = NSLocalizedString("Platform", tableName: "MemberCenterLocalizable", comment: "") number4Label.stringValue = NSLocalizedString("2 devices", tableName: "MemberCenterLocalizable", comment: "") number5Label.stringValue = NSLocalizedString("Devices Access", tableName: "MemberCenterLocalizable", comment: "") } else if userState == .unAutomatic_RemainValid { number1Label.stringValue = NSLocalizedString("", tableName: "MemberCenterLocalizable", comment: "") number2Label.stringValue = NSLocalizedString("Standard Version", tableName: "MemberCenterLocalizable", comment: "") number3Label.stringValue = NSLocalizedString("Platform", tableName: "MemberCenterLocalizable", comment: "") number4Label.stringValue = NSLocalizedString("4 devices", tableName: "MemberCenterLocalizable", comment: "") number5Label.stringValue = NSLocalizedString("Devices Access", tableName: "MemberCenterLocalizable", comment: "") buyNow3Label.stringValue = NSLocalizedString("Renew now", tableName: "MemberCenterLocalizable", comment: "") } else if userState == .expired { number1Label.stringValue = NSLocalizedString("150+", tableName: "MemberCenterLocalizable", comment: "") number2Label.stringValue = NSLocalizedString("Benefits of functions", tableName: "MemberCenterLocalizable", comment: "") number3Label.stringValue = NSLocalizedString("All-platform available", tableName: "MemberCenterLocalizable", comment: "") number4Label.stringValue = NSLocalizedString("4 devices", tableName: "MemberCenterLocalizable", comment: "") number5Label.stringValue = NSLocalizedString("Devices Access", tableName: "MemberCenterLocalizable", comment: "") buyNow2Label.stringValue = NSLocalizedString("Renew now", tableName: "MemberCenterLocalizable", comment: "") } } private func initializeUI() -> Void { userImageView.image = NSImage(named: "UserProfilePicture_Size") emailLabel.textColor = NSColor(named: "0E1114") emailLabel.font = NSFont.SFMediumFontWithSize(14) productLabel.textColor = NSColor(named: "42464D") productLabel.font = NSFont.SFProTextRegularFont(12) membershipLabel.textColor = NSColor(named: "0E1114") membershipLabel.font = NSFont.SFMediumFontWithSize(16) lockedBackgroud.image = NSImage(named: "ButtonBackgroundImage1") lockedLabel.textColor = NSColor(named: "42464D") lockedLabel.font = NSFont.SFMediumFontWithSize(12) rightsBox.contentView = rightsView number1Label.textColor = NSColor(named: "0E1114") number1Label.font = NSFont.SFMediumFontWithSize(24) number1ImageView.image = NSImage(named: "UpgradeImage") number2Label.textColor = NSColor(named: "42464D") number2Label.font = NSFont.SFProTextRegularFont(12) number3Label.textColor = NSColor(named: "42464D") number3Label.font = NSFont.SFProTextRegularFont(12) number5Label.textColor = NSColor(named: "42464D") number5Label.font = NSFont.SFProTextRegularFont(12) buyNow1ImageView.image = NSImage(named: "ButtonBackgroundImage2") buyNow2ImageView.image = NSImage(named: "ButtonBackgroundImage2") buyNow3ImageView.image = NSImage(named: "ButtonBackgroundImage2") buyNow1Label.textColor = NSColor(named: "FFFFFF") buyNow1Label.font = NSFont.SFProTextRegularFont(14) buyNow1ImageView.image = NSImage(named: "BuyNewArrowImage1") buyNow2Label.textColor = NSColor(named: "FFFFFF") buyNow2Label.font = NSFont.SFProTextRegularFont(14) buyNow2ImageView.image = NSImage(named: "BuyNewArrowImage1") buyNow3Label.textColor = NSColor(named: "000000") buyNow3Label.font = NSFont.SFProTextRegularFont(14) buyNow3ImageView.image = NSImage(named: "BuyNewArrowImage2") accountCenterBox.borderColor = NSColor(named: "3091FF") ?? .blue accountCenterBox.fillColor = .clear accountLabel.textColor = NSColor(named: "065CBC") accountLabel.font = NSFont.SFProTextRegularFont(14) accountImageView.image = NSImage(named: "AccountCenterImage") signOutLabel.textColor = NSColor(named: "065CBC") signOutLabel.font = NSFont.SFProTextRegularFont(14) signOutImageView.image = NSImage(named: "SignOutImage") closeAccountLabel.textColor = NSColor(named: "065CBC") closeAccountLabel.font = NSFont.SFProTextRegularFont(14) closeAccountImageView.image = NSImage(named: "CloseAccountImage") if userState == .unPay_UnTrial { lockedImageView.image = NSImage(named: "LockedImage") centerBackgroud.image = NSImage(named: "ButtonBackgroundImage3") rightsBox.fillColor = NSColor(named: "7094F6_0.1") ?? .white number1ImageView.isHidden = true number1Label.isHidden = false buyBox.contentView = buyView1 buyNow1ImageView.isHidden = false buyNow2ImageView.isHidden = false } else if userState == .permanentAccount { lockedImageView.image = NSImage(named: "UpgradeImage2") centerBackgroud.image = NSImage(named: "ButtonBackgroundImage4") rightsBox.fillColor = NSColor(named: "FFFFFF_0.2") ?? .white number1ImageView.isHidden = false number1Label.isHidden = true buyBox.contentView = buyView2 buyNow3ImageView.isHidden = true } else if userState == .unAutomatic_RemainValid { lockedImageView.image = NSImage(named: "UpgradeImage2") centerBackgroud.image = NSImage(named: "ButtonBackgroundImage5") rightsBox.fillColor = NSColor(named: "FFFFFF_0.2") ?? .white number1ImageView.isHidden = false number1Label.isHidden = true buyBox.contentView = buyView2 buyNow3ImageView.isHidden = true } else if userState == .expired { lockedImageView.image = NSImage(named: "LockedImage") centerBackgroud.image = NSImage(named: "ButtonBackgroundImage3") rightsBox.fillColor = NSColor(named: "7094F6_0.1") ?? .white number1ImageView.isHidden = true number1Label.isHidden = false buyBox.contentView = buyView1 buyNow1ImageView.isHidden = true buyNow2ImageView.isHidden = false } let platforms = viewModel.getPlatformsImages() if platforms.count == 4 { iconBox.contentView = iconView1 icon1ImageView.image = platforms[0] icon2ImageView.image = platforms[1] icon3ImageView.image = platforms[2] icon4ImageView.image = platforms[3] } else if platforms.count == 3 { iconBox.contentView = iconView2 icon5ImageView.image = platforms[0] icon6ImageView.image = platforms[1] icon7ImageView.image = platforms[2] } else if platforms.count == 2 { iconBox.contentView = iconView3 icon8ImageView.image = platforms[0] icon9ImageView.image = platforms[1] } else if platforms.count == 1 { iconBox.contentView = iconView4 icon10ImageView.image = platforms[0] } buyNow1Box.moveCallback = { [weak self](mouseEntered: Bool, mouseBox: KMBox) -> Void in guard let self = self else { return } if mouseEntered { self.buyNow1ImageView.image = NSImage(named: "ButtonBackgroundImage2_Hov") } else { self.buyNow1ImageView.image = NSImage(named: "ButtonBackgroundImage2") } } buyNow1Box.downCallback = { [weak self](downEntered: Bool, mouseBox: KMBox, event) -> Void in guard let self = self else { return } } buyNow2Box.moveCallback = { [weak self](mouseEntered: Bool, mouseBox: KMBox) -> Void in guard let self = self else { return } if mouseEntered { self.buyNow2ImageView.image = NSImage(named: "ButtonBackgroundImage2_Hov") } else { self.buyNow2ImageView.image = NSImage(named: "ButtonBackgroundImage2") } } buyNow2Box.downCallback = { [weak self](downEntered: Bool, mouseBox: KMBox, event) -> Void in guard let self = self else { return } } buyNow3Box.moveCallback = { [weak self](mouseEntered: Bool, mouseBox: KMBox) -> Void in guard let self = self else { return } } buyNow3Box.downCallback = { [weak self](downEntered: Bool, mouseBox: KMBox, event) -> Void in guard let self = self else { return } } accountCenterBox.moveCallback = { [weak self](mouseEntered: Bool, mouseBox: KMBox) -> Void in guard let self = self else { return } if mouseEntered { self.accountCenterBox.fillColor = NSColor(named: "F5FAFF") ?? NSColor.gray self.accountLabel.textColor = NSColor(named: "3091FF") self.accountImageView.image = NSImage(named: "AccountCenterImage_Hov") } else { self.accountCenterBox.fillColor = .clear self.accountLabel.textColor = NSColor(named: "065CBC") self.accountImageView.image = NSImage(named: "AccountCenterImage") } } accountCenterBox.downCallback = { [weak self](downEntered: Bool, mouseBox: KMBox, event) -> Void in guard let self = self else { return } self.viewModel.skipAccountCenter() } signOutBox.moveCallback = { [weak self](mouseEntered: Bool, mouseBox: KMBox) -> Void in guard let self = self else { return } if mouseEntered { self.signOutLabel.textColor = NSColor(named: "3091FF") self.signOutImageView.image = NSImage(named: "SignOutImage_Hov") } else { self.signOutLabel.textColor = NSColor(named: "065CBC") self.signOutImageView.image = NSImage(named: "SignOutImage") } } signOutBox.downCallback = { [weak self](downEntered: Bool, mouseBox: KMBox, event) -> Void in guard let self = self else { return } self.viewModel.signOutAction() } closeAccountBox.moveCallback = { [weak self](mouseEntered: Bool, mouseBox: KMBox) -> Void in guard let self = self else { return } } closeAccountBox.downCallback = { [weak self](downEntered: Bool, mouseBox: KMBox, event) -> Void in guard let self = self else { return } self.viewModel.closeAccountAction() } } // MARK: Bind Method func bindViewModel() -> Void { } // MARK: Action Method }