Files
Thijooree-iOS/Thijooree iOS/ViewModels/AppViewModel.swift
T

60 lines
1.2 KiB
Swift

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"
}
}