import 'dart:io' show Platform; import 'package:flutter/widgets.dart' show Color, WidgetsFlutterBinding; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:intl/intl.dart'; import 'package:timezone/data/latest.dart' as tz_data; import 'package:timezone/timezone.dart' as tz; import '../../app/router.dart'; import '../local/hive_boxes.dart'; import '../local/models/app_settings.dart'; import '../local/models/daily_worship_log.dart'; import '../local/models/shalat_log.dart'; import 'notification_analytics_service.dart'; import 'notification_runtime_service.dart'; @pragma('vm:entry-point') void notificationTapBackgroundHandler(NotificationResponse response) { final payload = response.payload ?? ''; final parts = payload.split('|'); final type = parts.first.trim().toLowerCase(); if (type == 'report' && response.actionId == 'action_prayed') { _markPrayedFromBackground(payload); } } @pragma('vm:entry-point') Future _markPrayedFromBackground(String payload) async { final parts = payload.split('|'); if (parts.length < 2) return; final prayerName = parts[1].trim().toLowerCase(); final prayerKey = _resolvePrayerKeyFromName(prayerName); if (prayerKey == null) return; WidgetsFlutterBinding.ensureInitialized(); await initHive(); final todayKey = DateFormat('yyyy-MM-dd').format(DateTime.now()); final worshipBox = Hive.box(HiveBoxes.worshipLogs); var log = worshipBox.get(todayKey); if (log == null) { log = DailyWorshipLog( date: todayKey, shalatLogs: {prayerKey: ShalatLog(completed: true)}, ); await worshipBox.put(todayKey, log); } else { log.shalatLogs[prayerKey] = ShalatLog(completed: true); await log.save(); } } @pragma('vm:entry-point') String? _resolvePrayerKeyFromName(String name) { switch (name.toLowerCase()) { case 'subuh': case 'fajr': return 'subuh'; case 'dzuhur': case 'dhuhr': return 'dzuhur'; case 'ashar': case 'asr': return 'ashar'; case 'maghrib': return 'maghrib'; case 'isya': case 'isha': return 'isya'; default: return null; } } String? routeForNotificationPayload(String? payload) { final parts = (payload ?? '').split('|'); final type = parts.first.trim().toLowerCase(); switch (type) { case 'report': case 'checklist': return '/checklist'; case 'adhan': case 'iqamah': return '/'; case 'streak_risk': // Payload format: streak_risk|