import SwiftUI @MainActor final class AppState: ObservableObject { @Published var userId: Int? @Published var userName: String? @Published var userPhotoUrl: String? @Published var userToken: String? @Published var businessId: Int = 0 @Published var isAuthenticated = false @Published var shouldPopToRoot = false @Published var shouldPopToTaskList = false @Published var needsRefresh = false /// Navigate back to root (business selection) and trigger a data refresh func popToRoot() { needsRefresh = true shouldPopToRoot = true } /// Navigate back to task list (not all the way to business selection) func popToTaskList() { needsRefresh = true shouldPopToTaskList = true } var isLoggedIn: Bool { userId != nil && userToken != nil } func setAuth(userId: Int, token: String, userName: String? = nil, photoUrl: String? = nil) { self.userId = userId self.userToken = token self.userName = userName self.userPhotoUrl = photoUrl self.isAuthenticated = true } func setBusinessId(_ id: Int) { self.businessId = id } func clearAuth() { userId = nil userToken = nil userName = nil userPhotoUrl = nil isAuthenticated = false businessId = 0 } func loadSavedAuth() async { let creds = await AuthStorage.shared.loadAuth() guard let creds = creds else { return } await APIService.shared.setAuth(token: creds.token, userId: creds.userId) setAuth(userId: creds.userId, token: creds.token, userName: creds.userName, photoUrl: creds.photoUrl) } }