// // Exercise.swift // Werkout_ios // // Created by Trey Tartt on 6/14/23. // import Foundation struct ExerciseElement: Codable, Equatable { let workout: Int let exercise: ExerciseExercise let weight: Int? let reps: Int? let duration: Int? let durationAudio: String? let weightAudio: String? let createdAt: String enum CodingKeys: String, CodingKey { case workout, exercise, weight, reps, duration case durationAudio = "duration_audio" case weightAudio = "weight_audio" case createdAt = "created_at" } } extension ExerciseElement { func videoURL(thotStyle: ThotStyle) -> URL? { var urlString: String? switch thotStyle { case .always: urlString = exercise.nsfwVideoURL case .never: urlString = exercise.videoURL case .recovery: if self.exercise.name.lowercased() == "recover" { urlString = exercise.nsfwVideoURL } else { urlString = exercise.videoURL } case .random: if Bool.random() { urlString = exercise.nsfwVideoURL } else { urlString = exercise.videoURL } } if let urlString = urlString, let url = URL(string: BaseURLs.currentBaseURL + urlString) { return url } return nil } } struct ExerciseExercise: Codable, Hashable, Identifiable { static func == (lhs: ExerciseExercise, rhs: ExerciseExercise) -> Bool { lhs.id == rhs.id } let id: Int let muscles: [ExerciseMuscle] let equipment: [ExerciseEquipment] let audioURL, videoURL, createdAt, updatedAt, nsfwVideoURL: String let name, description, side: String let isTwoDumbbells, isTrackableDistance, isAlternating, isWeight: Bool let isDistance, isDuration, isReps: Bool let jointsUsed, movementPatterns, equipmentRequired, muscleGroups: String let synonyms: String? enum CodingKeys: String, CodingKey { case id, muscles, equipment case audioURL = "audio_url" case videoURL = "video_url" case createdAt = "created_at" case updatedAt = "updated_at" case name, description, side case isTwoDumbbells = "is_two_dumbbells" case isTrackableDistance = "is_trackable_distance" case isAlternating = "is_alternating" case isWeight = "is_weight" case isDistance = "is_distance" case isDuration = "is_duration" case isReps = "is_reps" case jointsUsed = "joints_used" case movementPatterns = "movement_patterns" case equipmentRequired = "equipment_required" case muscleGroups = "muscle_groups" case synonyms case nsfwVideoURL = "nsfw_video_url" } } extension ExerciseExercise { func videoURL(thotStyle: ThotStyle) -> URL? { var urlString: String? switch thotStyle { case .always: urlString = nsfwVideoURL case .never: urlString = videoURL case .recovery: if self.name.lowercased() == "recovery" { urlString = nsfwVideoURL } else { urlString = videoURL } case .random: if Bool.random() { urlString = nsfwVideoURL } else { urlString = videoURL } } if let urlString = urlString, let url = URL(string: BaseURLs.currentBaseURL + urlString) { return url } return nil } }