// // MoodTintable.swift // Feels (iOS) // // Created by Trey Tartt on 2/19/22. // import SwiftUI protocol MoodTintable { static func color(forMood mood: Mood) -> Color static func secondary(forMood mood: Mood) -> Color } enum MoodTints: Int, CaseIterable { case Default case AllRed case Neon case MonoChrome case Pastel func color(forMood mood: Mood) -> Color { switch self { case .Default: return DefaultMoodTint.color(forMood: mood) case .AllRed: return AllRedMoodTint.color(forMood: mood) case .Neon: return NeonMoodTint.color(forMood: mood) case .MonoChrome: return MonoChromeTint.color(forMood: mood) case .Pastel: return PastelTint.color(forMood: mood) } } func secondary(forMood mood: Mood) -> Color { switch self { case .Default: return DefaultMoodTint.secondary(forMood: mood) case .AllRed: return AllRedMoodTint.secondary(forMood: mood) case .Neon: return NeonMoodTint.secondary(forMood: mood) case .MonoChrome: return MonoChromeTint.secondary(forMood: mood) case .Pastel: return PastelTint.secondary(forMood: mood) } } var moodTints: MoodTintable.Type { switch self { case .Default: return DefaultMoodTint.self case .AllRed: return AllRedMoodTint.self case .Neon: return NeonMoodTint.self case .MonoChrome: return MonoChromeTint.self case .Pastel: return PastelTint.self } } } final class DefaultMoodTint: MoodTintable { static func color(forMood mood: Mood) -> Color { switch mood { case .horrible: return Color(hex: "ff453a") case .bad: return Color(hex: "ff9e0b") case .average: return Color(hex: "0b84ff") case .good: return Color(hex: "ffd709") case .great: return Color(hex: "31d158") case .missing: return Color(uiColor: UIColor.systemGray4) case .placeholder: return Color(uiColor: UIColor.systemGray4) } } static func secondary(forMood mood: Mood) -> Color { switch mood { case .horrible: return Color(hex: "a92b26") case .bad: return Color(hex: "a06407") case .average: return Color(hex: "074f9a") case .good: return Color(hex: "9d8405") case .great: return Color(hex: "208939") case .missing: return Color(uiColor: UIColor.label) case .placeholder: return Color(uiColor: UIColor.label) } } } final class AllRedMoodTint: MoodTintable { static func color(forMood mood: Mood) -> Color { switch mood { case .horrible: return .red case .bad: return .red case .average: return .red case .good: return .red case .great: return .red case .missing: return Color(uiColor: UIColor.systemGray2) case .placeholder: return Color(uiColor: UIColor.systemGray2) } } static func secondary(forMood mood: Mood) -> Color { switch mood { case .horrible: return .red case .bad: return .red case .average: return .red case .good: return .red case .great: return .red case .missing: return Color(uiColor: UIColor.label) case .placeholder: return Color(uiColor: UIColor.label) } } } final class NeonMoodTint: MoodTintable { static func color(forMood mood: Mood) -> Color { switch mood { case .horrible: return Color(hex: "#ff1818") case .bad: return Color(hex: "#FF5F1F") case .average: return Color(hex: "#1F51FF") case .good: return Color(hex: "#FFF01F") case .great: return Color(hex: "#39FF14") case .missing: return Color(uiColor: UIColor.systemGray2) case .placeholder: return Color(uiColor: UIColor.systemGray2) } } static func secondary(forMood mood: Mood) -> Color { switch mood { case .horrible: return Color(hex: "#8b1113") case .bad: return Color(hex: "#893315") case .average: return Color(hex: "#0f2a85") case .good: return Color(hex: "#807a18") case .great: return Color(hex: "#218116") case .missing: return Color(uiColor: UIColor.label) case .placeholder: return Color(uiColor: UIColor.label) } } } final class MonoChromeTint: MoodTintable { static func color(forMood mood: Mood) -> Color { switch mood { case .horrible: return .black case .bad: return Color(uiColor: UIColor.systemGray) case .average: return Color(uiColor: UIColor.systemGray) case .good: return Color(uiColor: UIColor.systemGray2) case .great: return Color(uiColor: UIColor.systemGray3) case .missing: return Color(uiColor: UIColor.systemGray2) case .placeholder: return Color(uiColor: UIColor.systemGray4) } } static func secondary(forMood mood: Mood) -> Color { switch mood { case .horrible: return .black case .bad: return Color(uiColor: UIColor.systemGray) case .average: return Color(uiColor: UIColor.systemGray) case .good: return Color(uiColor: UIColor.systemGray2) case .great: return Color(uiColor: UIColor.systemGray3) case .missing: return Color(uiColor: UIColor.systemGray2) case .placeholder: return Color(uiColor: UIColor.systemGray4) } } } final class PastelTint: MoodTintable { static func color(forMood mood: Mood) -> Color { switch mood { case .horrible: return Color(hex: "#FF6961") case .bad: return Color(hex: "#ffb347") case .average: return Color(hex: "#A7C7E7") case .good: return Color(hex: "#fdfd96") case .great: return Color(hex: "#C1E1C1") case .missing: return Color(uiColor: UIColor.systemGray2) case .placeholder: return Color(uiColor: UIColor.systemGray4) } } static func secondary(forMood mood: Mood) -> Color { switch mood { case .horrible: return Color(hex: "#893734") case .bad: return Color(hex: "#855d28") case .average: return Color(hex: "#5d6e83") case .good: return Color(hex: "#7f804f") case .great: return Color(hex: "#6b7e6d") case .missing: return Color(uiColor: UIColor.systemGray2) case .placeholder: return Color(uiColor: UIColor.systemGray4) } } }