import SwiftUI struct LibraryView: View { @ObservedObject var authManager: AuthManager @State private var books: [AudiobookItem] = [] @State private var isLoading = true @State private var errorMessage = "" var body: some View { NavigationView { Group { if isLoading { ProgressView("Lädt Bibliothek...") } else if !errorMessage.isEmpty { Text(errorMessage).foregroundColor(.red) } else { ScrollView { LazyVGrid(columns: [GridItem(.adaptive(minimum: 150))], spacing: 16) { ForEach(books) { book in BookCard(book: book, authManager: authManager) } } .padding() } } } .navigationTitle("Meine Bibliothek") .toolbar { Button("Logout") { authManager.logout() } } } .onAppear { loadBooks() } } func loadBooks() { guard let serverURL = authManager.serverURL, let token = authManager.token else { return } // Erst Libraries laden, dann Bücher let url = URL(string: "\(serverURL)/api/libraries")! var request = URLRequest(url: url) request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") URLSession.shared.dataTask(with: request) { data, _, error in guard let data = data else { return } if let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], let libraries = json["libraries"] as? [[String: Any]], let firstLib = libraries.first, let libId = firstLib["id"] as? String { loadBooksFromLibrary(libId: libId, serverURL: serverURL, token: token) } }.resume() } func loadBooksFromLibrary(libId: String, serverURL: String, token: String) { let url = URL(string: "\(serverURL)/api/libraries/\(libId)/items")! var request = URLRequest(url: url) request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") URLSession.shared.dataTask(with: request) { data, _, _ in guard let data = data else { return } if let json = try? JSON