Andromida/Andromida/App/Models/RitualPresets.swift

283 lines
13 KiB
Swift

import Foundation
/// A template for a habit within a preset ritual
struct HabitPreset: Identifiable {
let id = UUID()
let title: String
let symbolName: String
}
/// A template ritual that users can add to their collection
struct RitualPreset: Identifiable {
let id = UUID()
let title: String
let theme: String
let notes: String
let durationDays: Int
let timeOfDay: TimeOfDay
let iconName: String
let category: String
let habits: [HabitPreset]
}
/// Categories for organizing presets
enum PresetCategory: String, CaseIterable {
case health = "Health"
case productivity = "Productivity"
case mindfulness = "Mindfulness"
case selfCare = "Self-Care"
var displayName: String {
rawValue
}
var symbolName: String {
switch self {
case .health: return "heart.fill"
case .productivity: return "bolt.fill"
case .mindfulness: return "brain.head.profile"
case .selfCare: return "sparkles"
}
}
}
/// Library of preset rituals organized by category
enum RitualPresetLibrary {
static var allPresets: [RitualPreset] {
healthPresets + productivityPresets + mindfulnessPresets + selfCarePresets
}
static func presets(for category: PresetCategory) -> [RitualPreset] {
switch category {
case .health: return healthPresets
case .productivity: return productivityPresets
case .mindfulness: return mindfulnessPresets
case .selfCare: return selfCarePresets
}
}
// MARK: - Health Presets
static let healthPresets: [RitualPreset] = [
RitualPreset(
title: String(localized: "Morning Hydration"),
theme: String(localized: "Start your day refreshed"),
notes: String(localized: "Build the habit of hydrating first thing in the morning."),
durationDays: 21,
timeOfDay: .morning,
iconName: "drop.fill",
category: PresetCategory.health.rawValue,
habits: [
HabitPreset(title: String(localized: "Drink a glass of water"), symbolName: "drop.fill"),
HabitPreset(title: String(localized: "Take vitamins"), symbolName: "pill.fill"),
HabitPreset(title: String(localized: "Eat a healthy breakfast"), symbolName: "fork.knife")
]
),
RitualPreset(
title: String(localized: "Midday Movement"),
theme: String(localized: "Break up your day"),
notes: String(localized: "Combat sedentary habits with midday activity."),
durationDays: 28,
timeOfDay: .anytime,
iconName: "figure.walk",
category: PresetCategory.health.rawValue,
habits: [
HabitPreset(title: String(localized: "Take a 10-minute walk"), symbolName: "figure.walk"),
HabitPreset(title: String(localized: "Stretch at your desk"), symbolName: "figure.flexibility"),
HabitPreset(title: String(localized: "Drink water"), symbolName: "drop.fill")
]
),
RitualPreset(
title: String(localized: "Sleep Preparation"),
theme: String(localized: "Rest better tonight"),
notes: String(localized: "Wind down with habits that promote quality sleep."),
durationDays: 28,
timeOfDay: .evening,
iconName: "moon.zzz.fill",
category: PresetCategory.health.rawValue,
habits: [
HabitPreset(title: String(localized: "No caffeine after 2pm"), symbolName: "cup.and.saucer.fill"),
HabitPreset(title: String(localized: "Dim lights 1 hour before bed"), symbolName: "lightbulb.fill"),
HabitPreset(title: String(localized: "Set consistent bedtime"), symbolName: "bed.double.fill"),
HabitPreset(title: String(localized: "Keep room cool"), symbolName: "thermometer.snowflake")
]
)
]
// MARK: - Productivity Presets
static let productivityPresets: [RitualPreset] = [
RitualPreset(
title: String(localized: "Deep Work Prep"),
theme: String(localized: "Set up for focus"),
notes: String(localized: "Create the conditions for uninterrupted deep work."),
durationDays: 21,
timeOfDay: .morning,
iconName: "brain",
category: PresetCategory.productivity.rawValue,
habits: [
HabitPreset(title: String(localized: "Clear your desk"), symbolName: "tray.full.fill"),
HabitPreset(title: String(localized: "Set phone to Do Not Disturb"), symbolName: "bell.slash.fill"),
HabitPreset(title: String(localized: "Define your top 3 priorities"), symbolName: "list.number"),
HabitPreset(title: String(localized: "Close unnecessary tabs"), symbolName: "xmark.square.fill")
]
),
RitualPreset(
title: String(localized: "End-of-Day Review"),
theme: String(localized: "Close loops, plan ahead"),
notes: String(localized: "Review your day and set up tomorrow for success."),
durationDays: 28,
timeOfDay: .evening,
iconName: "checkmark.circle.fill",
category: PresetCategory.productivity.rawValue,
habits: [
HabitPreset(title: String(localized: "Review completed tasks"), symbolName: "checkmark.square.fill"),
HabitPreset(title: String(localized: "Clear your inbox"), symbolName: "envelope.fill"),
HabitPreset(title: String(localized: "Plan tomorrow's priorities"), symbolName: "calendar.badge.plus"),
HabitPreset(title: String(localized: "Tidy workspace"), symbolName: "sparkles")
]
),
RitualPreset(
title: String(localized: "Focus Reset"),
theme: String(localized: "Regain clarity"),
notes: String(localized: "When you feel scattered, use this to refocus."),
durationDays: 14,
timeOfDay: .anytime,
iconName: "target",
category: PresetCategory.productivity.rawValue,
habits: [
HabitPreset(title: String(localized: "Take 5 deep breaths"), symbolName: "wind"),
HabitPreset(title: String(localized: "Write down what's on your mind"), symbolName: "pencil.and.list.clipboard"),
HabitPreset(title: String(localized: "Choose ONE thing to focus on"), symbolName: "scope")
]
)
]
// MARK: - Mindfulness Presets
static let mindfulnessPresets: [RitualPreset] = [
RitualPreset(
title: String(localized: "Morning Meditation"),
theme: String(localized: "Start with stillness"),
notes: String(localized: "A calm mind sets the tone for a calm day."),
durationDays: 30,
timeOfDay: .morning,
iconName: "figure.mind.and.body",
category: PresetCategory.mindfulness.rawValue,
habits: [
HabitPreset(title: String(localized: "5-minute meditation"), symbolName: "figure.mind.and.body"),
HabitPreset(title: String(localized: "Set an intention for the day"), symbolName: "star.fill"),
HabitPreset(title: String(localized: "Practice gratitude"), symbolName: "heart.fill")
]
),
RitualPreset(
title: String(localized: "Gratitude Practice"),
theme: String(localized: "Find the good"),
notes: String(localized: "Shift your focus to what's going well."),
durationDays: 21,
timeOfDay: .evening,
iconName: "heart.text.square.fill",
category: PresetCategory.mindfulness.rawValue,
habits: [
HabitPreset(title: String(localized: "Write 3 things you're grateful for"), symbolName: "list.bullet.clipboard.fill"),
HabitPreset(title: String(localized: "Thank someone"), symbolName: "person.wave.2.fill"),
HabitPreset(title: String(localized: "Reflect on a positive moment"), symbolName: "sun.max.fill")
]
),
RitualPreset(
title: String(localized: "Breathwork"),
theme: String(localized: "Calm your nervous system"),
notes: String(localized: "Use breath to reduce stress and increase focus."),
durationDays: 14,
timeOfDay: .anytime,
iconName: "wind",
category: PresetCategory.mindfulness.rawValue,
habits: [
HabitPreset(title: String(localized: "Box breathing (4-4-4-4)"), symbolName: "square"),
HabitPreset(title: String(localized: "Body scan for tension"), symbolName: "figure.stand"),
HabitPreset(title: String(localized: "Release shoulder tension"), symbolName: "arrow.down.circle.fill")
]
),
RitualPreset(
title: String(localized: "Evening Reflection"),
theme: String(localized: "Process your day"),
notes: String(localized: "Close the day with awareness and intention."),
durationDays: 28,
timeOfDay: .evening,
iconName: "moon.stars.fill",
category: PresetCategory.mindfulness.rawValue,
habits: [
HabitPreset(title: String(localized: "Journal for 5 minutes"), symbolName: "book.fill"),
HabitPreset(title: String(localized: "What went well today?"), symbolName: "hand.thumbsup.fill"),
HabitPreset(title: String(localized: "What could be better?"), symbolName: "lightbulb.fill"),
HabitPreset(title: String(localized: "Let go of the day"), symbolName: "leaf.fill")
]
)
]
// MARK: - Self-Care Presets
static let selfCarePresets: [RitualPreset] = [
RitualPreset(
title: String(localized: "Morning Skincare"),
theme: String(localized: "Care for yourself"),
notes: String(localized: "A consistent skincare routine for healthy skin."),
durationDays: 28,
timeOfDay: .morning,
iconName: "drop.triangle.fill",
category: PresetCategory.selfCare.rawValue,
habits: [
HabitPreset(title: String(localized: "Cleanse face"), symbolName: "drop.fill"),
HabitPreset(title: String(localized: "Apply moisturizer"), symbolName: "humidity.fill"),
HabitPreset(title: String(localized: "Apply sunscreen"), symbolName: "sun.max.fill")
]
),
RitualPreset(
title: String(localized: "Digital Detox"),
theme: String(localized: "Disconnect to reconnect"),
notes: String(localized: "Give your mind a break from screens."),
durationDays: 21,
timeOfDay: .evening,
iconName: "iphone.slash",
category: PresetCategory.selfCare.rawValue,
habits: [
HabitPreset(title: String(localized: "No screens 1 hour before bed"), symbolName: "iphone.slash"),
HabitPreset(title: String(localized: "Read a physical book"), symbolName: "book.closed.fill"),
HabitPreset(title: String(localized: "Have a real conversation"), symbolName: "person.2.fill")
]
),
RitualPreset(
title: String(localized: "Evening Wind-Down"),
theme: String(localized: "Transition to rest"),
notes: String(localized: "Create a buffer between your day and sleep."),
durationDays: 28,
timeOfDay: .evening,
iconName: "moon.fill",
category: PresetCategory.selfCare.rawValue,
habits: [
HabitPreset(title: String(localized: "Change into comfortable clothes"), symbolName: "tshirt.fill"),
HabitPreset(title: String(localized: "Light a candle or dim lights"), symbolName: "flame.fill"),
HabitPreset(title: String(localized: "Gentle stretching"), symbolName: "figure.flexibility"),
HabitPreset(title: String(localized: "Herbal tea"), symbolName: "cup.and.saucer.fill")
]
),
RitualPreset(
title: String(localized: "Weekly Reset"),
theme: String(localized: "Prepare for a fresh week"),
notes: String(localized: "Sunday evening ritual to start Monday strong."),
durationDays: 12,
timeOfDay: .evening,
iconName: "arrow.counterclockwise.circle.fill",
category: PresetCategory.selfCare.rawValue,
habits: [
HabitPreset(title: String(localized: "Review last week"), symbolName: "calendar"),
HabitPreset(title: String(localized: "Plan the week ahead"), symbolName: "calendar.badge.plus"),
HabitPreset(title: String(localized: "Prepare clothes for Monday"), symbolName: "tshirt.fill"),
HabitPreset(title: String(localized: "Tidy your space"), symbolName: "sparkles"),
HabitPreset(title: String(localized: "Early bedtime"), symbolName: "bed.double.fill")
]
)
]
}