import Foundation import Observation @Observable final class AppViewModel { enum Route: Equatable { case onboarding case login case lock case home } private(set) var route: Route init() { route = AppViewModel.initialRoute() } // MARK: - Route transitions (called by child views) func completeOnboarding() { UserDefaults.standard.set(true, forKey: "onboarding_done") route = .login } func loginSucceeded() { route = AppViewModel.requiresLock() ? .lock : .home } func unlock() { route = .home } func lock() { route = .lock } func logout() { route = .login } // MARK: - Private private static func initialRoute() -> Route { guard UserDefaults.standard.bool(forKey: "onboarding_done") else { return .onboarding } guard CredentialStore.shared.hasAnyCredentials() else { return .login } return requiresLock() ? .lock : .home } private static func requiresLock() -> Bool { let method = UserDefaults.standard.string(forKey: "security_method") ?? "" return !method.isEmpty && method != "none" } }