// // MoodStatusCatalog.swift // QuickLocation // import UIKit struct MoodStatusItem { let moodIndex: Int let jsonName: String let pngName: String var jsonPath: String? { MoodStatusCatalog.resourcePath( name: jsonName, ext: "json", directories: ["emoji/mood", "lotties/emoji/mood"] ) } var pngPath: String? { MoodStatusCatalog.resourcePath( name: pngName, ext: "png", directories: ["emoji/mood/png", "lotties/emoji/mood/png"] ) } var pngImage: UIImage? { guard let pngPath else { return nil } return UIImage(contentsOfFile: pngPath) } } enum MoodStatusCatalog { static let items: [MoodStatusItem] = numberedItems + namedItems static func item(moodIndex: Int) -> MoodStatusItem? { items.first { $0.moodIndex == moodIndex } } static func resourcePath(name: String, ext: String, directories: [String]) -> String? { for directory in directories { if let path = Bundle.main.path(forResource: name, ofType: ext, inDirectory: directory) { return path } } return Bundle.main.path(forResource: name, ofType: ext) } private static let numberedItems: [MoodStatusItem] = [ MoodStatusItem(moodIndex: 1, jsonName: "1", pngName: "1-075"), MoodStatusItem(moodIndex: 2, jsonName: "2", pngName: "2-158"), MoodStatusItem(moodIndex: 3, jsonName: "3", pngName: "3-020"), MoodStatusItem(moodIndex: 4, jsonName: "4", pngName: "4-098"), MoodStatusItem(moodIndex: 5, jsonName: "5", pngName: "5-045"), MoodStatusItem(moodIndex: 6, jsonName: "6", pngName: "6-094"), MoodStatusItem(moodIndex: 7, jsonName: "7", pngName: "7-083"), MoodStatusItem(moodIndex: 8, jsonName: "8", pngName: "8-112"), MoodStatusItem(moodIndex: 9, jsonName: "9", pngName: "9-138"), MoodStatusItem(moodIndex: 10, jsonName: "10", pngName: "10-153"), MoodStatusItem(moodIndex: 11, jsonName: "11", pngName: "11-003"), MoodStatusItem(moodIndex: 12, jsonName: "12", pngName: "12-154") ] private static let namedItems: [MoodStatusItem] = [ MoodStatusItem(moodIndex: 13, jsonName: "bathing-emoji", pngName: "bathing-emoji-160"), MoodStatusItem(moodIndex: 14, jsonName: "calling-emoji", pngName: "calling-emoji-153"), MoodStatusItem(moodIndex: 15, jsonName: "drinking-emoji", pngName: "drinking-emoji-159"), MoodStatusItem(moodIndex: 16, jsonName: "eating-emoji", pngName: "eating-emoji-156"), MoodStatusItem(moodIndex: 17, jsonName: "emoji-using-laptop", pngName: "emoji-using-laptop-065"), MoodStatusItem(moodIndex: 18, jsonName: "exploding-head-emoji", pngName: "exploding-head-emoji-147"), MoodStatusItem(moodIndex: 19, jsonName: "face-with-bandage", pngName: "face-with-bandage-098"), MoodStatusItem(moodIndex: 20, jsonName: "flushed-emoji", pngName: "flushed-emoji-099"), MoodStatusItem(moodIndex: 21, jsonName: "grimacing-emoji", pngName: "grimacing-emoji-128"), MoodStatusItem(moodIndex: 22, jsonName: "hand-over-mouth-emoji", pngName: "hand-over-mouth-emoji-160"), MoodStatusItem(moodIndex: 23, jsonName: "innocent-emoji", pngName: "innocent-emoji-163"), MoodStatusItem(moodIndex: 24, jsonName: "lifting-emoji", pngName: "lifting-emoji-117"), MoodStatusItem(moodIndex: 25, jsonName: "looking-emoji", pngName: "looking-emoji-086"), MoodStatusItem(moodIndex: 26, jsonName: "meeting-emoji", pngName: "meeting-emoji-113"), MoodStatusItem(moodIndex: 27, jsonName: "no-emoji", pngName: "no-emoji-082"), MoodStatusItem(moodIndex: 28, jsonName: "prey-emoji", pngName: "prey-emoji-094"), MoodStatusItem(moodIndex: 29, jsonName: "rage-emoji", pngName: "rage-emoji-133"), MoodStatusItem(moodIndex: 30, jsonName: "reading-book-emoji", pngName: "reading-book-emoji-080"), MoodStatusItem(moodIndex: 31, jsonName: "relieved-emoji", pngName: "relieved-emoji-089"), MoodStatusItem(moodIndex: 32, jsonName: "shopping-emoji", pngName: "shopping-emoji-097"), MoodStatusItem(moodIndex: 33, jsonName: "sick", pngName: "sick-154"), MoodStatusItem(moodIndex: 34, jsonName: "sleep", pngName: "sleep-148"), MoodStatusItem(moodIndex: 35, jsonName: "vomiting-emoji", pngName: "vomiting-emoji-168"), MoodStatusItem(moodIndex: 36, jsonName: "washroom-emoji", pngName: "washroom-emoji-047") ] }