import Foundation import Yams struct ExerciseList: Codable { let name: String let source: String let exercises: [ExerciseItem] struct ExerciseItem: Codable, Identifiable { let name: String let descr: String let type: String var id: String { name } } } class ExerciseListLoader { static func loadExerciseLists() -> [String: ExerciseList] { var exerciseLists: [String: ExerciseList] = [:] guard let resourcePath = Bundle.main.resourcePath else { print("Could not find resource path") return exerciseLists } do { let fileManager = FileManager.default let resourceURL = URL(fileURLWithPath: resourcePath) let yamlFiles = try fileManager.contentsOfDirectory(at: resourceURL, includingPropertiesForKeys: nil) .filter { $0.pathExtension == "yaml" && $0.lastPathComponent.hasSuffix(".exercises.yaml") } for yamlFile in yamlFiles { let fileName = yamlFile.lastPathComponent do { let yamlString = try String(contentsOf: yamlFile, encoding: .utf8) if let exerciseList = try Yams.load(yaml: yamlString) as? [String: Any], let name = exerciseList["name"] as? String, let source = exerciseList["source"] as? String, let exercisesData = exerciseList["exercises"] as? [[String: Any]] { var exercises: [ExerciseList.ExerciseItem] = [] for exerciseData in exercisesData { if let name = exerciseData["name"] as? String, let descr = exerciseData["descr"] as? String, let type = exerciseData["type"] as? String { let exercise = ExerciseList.ExerciseItem(name: name, descr: descr, type: type) exercises.append(exercise) } } let exerciseList = ExerciseList(name: name, source: source, exercises: exercises) exerciseLists[fileName] = exerciseList } } catch { print("Error loading YAML file \(fileName): \(error)") } } } catch { print("Error listing directory contents: \(error)") } return exerciseLists } }