import SwiftUI @MainActor @Observable final class FrontPageViewModel { private static let redditHomeURL = URL(string: "https://www.reddit.com")! private(set) var redditLoadURL = redditHomeURL static let postGeneratorItem = SidebarNavItem( title: "Post Generator", subtitle: "Generate engaging posts", iconKind: .postGenerator ) var selectedNavItem: SidebarNavItem? = postGeneratorItem var isRedditActive = false var isSettingsActive = false var isHistoryActive = false var isPaywallPresented = false var authErrorMessage: String? var hasOpenedReddit = false private(set) var redditReloadTrigger = 0 private(set) var redditGoBackTrigger = 0 var redditCanGoBack = false static let historyItem = SidebarNavItem( title: "History", subtitle: "Saved AI responses", iconKind: .history ) static let settingsItem = SidebarNavItem( title: "Settings", subtitle: "Manage app preferences", iconKind: .settings ) func openReddit(at url: URL? = nil) { hasOpenedReddit = true selectedNavItem = nil isSettingsActive = false isHistoryActive = false setRedditActive(true) guard let url else { return } redditLoadURL = url if RedditWebAuthHelper.isRedditHomeURL(url) { redditCanGoBack = false } redditReloadTrigger += 1 } func showAuthError(_ message: String) { authErrorMessage = message } func clearAuthError() { authErrorMessage = nil } func goBackInReddit() { guard redditCanGoBack else { return } redditGoBackTrigger += 1 } func updateRedditCanGoBack(_ canGoBack: Bool) { redditCanGoBack = canGoBack } func openSettings() { selectedNavItem = nil setRedditActive(false) isSettingsActive = true isHistoryActive = false } func openHistory() { selectedNavItem = nil setRedditActive(false) isSettingsActive = false isHistoryActive = true } func selectNavItem(_ item: SidebarNavItem) { selectedNavItem = item setRedditActive(false) isSettingsActive = false isHistoryActive = false } func deactivateRedditForPremiumGate() { setRedditActive(false) } private func setRedditActive(_ active: Bool) { isRedditActive = active RedditWebViewStore.shared.setRedditPageActive(active) } func showPaywall() { isPaywallPresented = true RedditWebViewStore.shared.setPaywallPresented(true) } func dismissPaywall() { isPaywallPresented = false RedditWebViewStore.shared.setPaywallPresented(false) } let createItems: [SidebarNavItem] = [ postGeneratorItem, SidebarNavItem(title: "Title Optimizer", subtitle: "Create viral titles", iconKind: .titleOptimizer), SidebarNavItem(title: "Comment Writer", subtitle: "Write smart replies", iconKind: .commentWriter), ] }