package com.rssuper.services import android.content.Context import com.rssuper.database.RssDatabase import com.rssuper.database.entities.NotificationPreferencesEntity import com.rssuper.database.entities.toEntity import com.rssuper.models.NotificationPreferences import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext class NotificationPreferencesStore(private val context: Context) { private val database: RssDatabase = RssDatabase.getDatabase(context) suspend fun getPreferences(): NotificationPreferences { return withContext(Dispatchers.IO) { val entity = database.notificationPreferencesDao().getSync("default") entity?.toModel() ?: NotificationPreferences() } } suspend fun savePreferences(preferences: NotificationPreferences) { withContext(Dispatchers.IO) { database.notificationPreferencesDao().insert(preferences.toEntity()) } } suspend fun updatePreference( newArticles: Boolean? = null, episodeReleases: Boolean? = null, customAlerts: Boolean? = null, badgeCount: Boolean? = null, sound: Boolean? = null, vibration: Boolean? = null ) { withContext(Dispatchers.IO) { val current = database.notificationPreferencesDao().getSync("default") val preferences = current?.toModel() ?: NotificationPreferences() val updated = preferences.copy( newArticles = newArticles ?: preferences.newArticles, episodeReleases = episodeReleases ?: preferences.episodeReleases, customAlerts = customAlerts ?: preferences.customAlerts, badgeCount = badgeCount ?: preferences.badgeCount, sound = sound ?: preferences.sound, vibration = vibration ?: preferences.vibration ) database.notificationPreferencesDao().insert(updated.toEntity()) } } suspend fun isNotificationEnabled(type: NotificationType): Boolean { val preferences = getPreferences() return when (type) { NotificationType.NEW_ARTICLE -> preferences.newArticles NotificationType.PODCAST_EPISODE -> preferences.episodeReleases NotificationType.LOW_PRIORITY, NotificationType.CRITICAL -> true } } suspend fun isSoundEnabled(): Boolean { return getPreferences().sound } suspend fun isVibrationEnabled(): Boolean { return getPreferences().vibration } suspend fun isBadgeEnabled(): Boolean { return getPreferences().badgeCount } }