// // TimeUntilAlarmSection.swift // TheNoiseClock // // Created by Matt Bruce on 9/8/25. // import SwiftUI /// Component showing time until alarm and day information struct TimeUntilAlarmSection: View { let alarmTime: Date var body: some View { VStack(spacing: 4) { HStack { Image(systemName: "calendar") .foregroundColor(AppAccent.primary) Text(timeUntilAlarm) .font(.subheadline) .foregroundColor(.secondary) } Text(dayText) .font(.caption) .foregroundColor(.secondary) } .padding(.vertical, 12) .background(Color(.systemGroupedBackground)) } private var timeUntilAlarm: String { let now = Date() let calendar = Calendar.current // Calculate the next occurrence of the alarm time let nextAlarmTime: Date if calendar.isDateInToday(alarmTime) && alarmTime < now { // If alarm time has passed today, calculate for tomorrow nextAlarmTime = calendar.date(byAdding: .day, value: 1, to: alarmTime) ?? alarmTime } else { // Use the alarm time as-is (either future today or already tomorrow+) nextAlarmTime = alarmTime } // Calculate time difference from now to next alarm let components = calendar.dateComponents([.hour, .minute], from: now, to: nextAlarmTime) if let hours = components.hour, let minutes = components.minute { if hours > 0 { return "Will turn on in \(hours)h \(minutes)m" } else if minutes > 0 { return "Will turn on in \(minutes)m" } else { return "Will turn on now" } } return "Will turn on tomorrow" } private var dayText: String { let calendar = Calendar.current let now = Date() // If alarm time is in the past today, show tomorrow if calendar.isDateInToday(alarmTime) && alarmTime < now { return "Tomorrow" } else if calendar.isDateInToday(alarmTime) { return "Today" } else if calendar.isDateInTomorrow(alarmTime) { return "Tomorrow" } else { let formatter = DateFormatter() formatter.dateFormat = "EEEE" return formatter.string(from: alarmTime) } } }