import Foundation import Observation @MainActor @Observable final class ARProjectsViewModel { private(set) var supplied: [ARProject] = [] private(set) var custom: [ARProject] = [] private(set) var isLoading = true var errorMessage: String? private let service: any ARProjectsProviding init(service: any ARProjectsProviding) { self.service = service } func load() { isLoading = true defer { isLoading = false } do { let projects = try service.loadProjects() supplied = projects.filter { $0.source == .supplied } custom = projects.filter { $0.source == .custom } } catch { errorMessage = error.localizedDescription } } func update(id: UUID, name: String, tank: Tank) -> ARProject? { do { let project = try service.updateProject(id: id, name: name, tank: tank) if let index = custom.firstIndex(where: { $0.id == id }) { custom[index] = project } return project } catch { errorMessage = error.localizedDescription return nil } } func delete(id: UUID) { do { try service.deleteProject(id: id) supplied.removeAll { $0.id == id } custom.removeAll { $0.id == id } } catch { errorMessage = error.localizedDescription } } func create(name: String, tank: Tank) -> ARProject? { do { let project = try service.createProject(name: name, tank: tank) custom.insert(project, at: 0) return project } catch { errorMessage = error.localizedDescription return nil } } }