import Foundation import UserNotifications @MainActor final class NotificationService { static let shared = NotificationService() private init() {} func requestPermissionIfNeeded() async { let center = UNUserNotificationCenter.current() let settings = await center.notificationSettings() guard settings.authorizationStatus == .notDetermined else { return } _ = try? await center.requestAuthorization(options: [.alert, .sound, .badge]) } func schedulePlanningReminderIfNeeded(nextWeekPlan: WeekPlan?, language: AppLanguage) { let center = UNUserNotificationCenter.current() let identifier = "mealmood.next-week-planning" let isComplete = nextWeekPlan?.slots.allSatisfy { $0.dishId != nil } ?? false if isComplete { center.removePendingNotificationRequests(withIdentifiers: [identifier]) return } let nextWeekStart = Date().startOfWeek().addingDays(7) let reminderDay = nextWeekStart.addingDays(-1) let calendar = Calendar.current var components = calendar.dateComponents([.year, .month, .day], from: reminderDay) components.hour = 19 components.minute = 0 let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: false) let content = UNMutableNotificationContent() content.title = localizedString("notification_planning_title", language: language) content.body = localizedString("notification_planning_body", language: language) content.sound = .default let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) center.removePendingNotificationRequests(withIdentifiers: [identifier]) center.add(request) } }