import UIKit import Combine import Defaults import Integration import PushFeature import DependencyInjection final class SearchContainerViewModel { @Dependency var session: SessionType @Dependency var pushHandler: PushHandling @KeyObject(.dummyTrafficOn, defaultValue: false) var isCoverTrafficEnabled @KeyObject(.pushNotifications, defaultValue: false) var pushNotifications @KeyObject(.askedDummyTrafficOnce, defaultValue: false) var offeredCoverTraffic var coverTrafficPublisher: AnyPublisher<Void, Never> { coverTrafficSubject.eraseToAnyPublisher() } private let coverTrafficSubject = PassthroughSubject<Void, Never>() func didAppear() { verifyCoverTraffic() verifyNotifications() } func didEnableCoverTraffic() { isCoverTrafficEnabled = true session.setDummyTraffic(status: true) } private func verifyCoverTraffic() { guard offeredCoverTraffic == false else { return } offeredCoverTraffic = true coverTrafficSubject.send() } private func verifyNotifications() { guard pushNotifications == false else { return } pushHandler.requestAuthorization { [weak self] result in guard let self = self else { return } switch result { case .success(let granted): if granted { DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications() } } self.pushNotifications = granted case .failure: self.pushNotifications = false } } } }