package com.vgmlr.jamb
import android.content.Context
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
private val Context.dataStore by preferencesDataStore("jamb_prefs")
class JambPrefs(private val context: Context) {
companion object {
const val ALL = "__ALL__"
const val NONE = "__NONE__"
const val MODE_SORTED = "SORTED"
const val MODE_SHUFFLE = "SHUFFLE"
const val AWAKE_NONE = "NONE"
const val AWAKE_CHARGING = "CHARGING"
const val AWAKE_ALWAYS = "ALWAYS"
private val FOLDER = stringPreferencesKey("folder")
private val MODE = stringPreferencesKey("mode")
private val REPEAT = booleanPreferencesKey("repeat")
private val PLAYLIST = stringPreferencesKey("playlist")
private val KEEP_AWAKE = stringPreferencesKey("keep_awake")
}
suspend fun read(): Triple<String, String, Boolean> {
val p = context.dataStore.data.first()
return Triple(p[FOLDER] ?: ALL, p[MODE] ?: MODE_SORTED, p[REPEAT] ?: false)
}
suspend fun getPlaylist(): String? = context.dataStore.data.first()[PLAYLIST]
val keepAwake: Flow<String>
get() = context.dataStore.data.map { it[KEEP_AWAKE] ?: AWAKE_NONE }
suspend fun getKeepAwake(): String =
context.dataStore.data.first()[KEEP_AWAKE] ?: AWAKE_NONE
suspend fun setKeepAwake(v: String) = context.dataStore.edit { it[KEEP_AWAKE] = v }
suspend fun setFolder(v: String) = context.dataStore.edit { it[FOLDER] = v }
suspend fun setMode(v: String) = context.dataStore.edit { it[MODE] = v }
suspend fun setRepeat(v: Boolean) = context.dataStore.edit { it[REPEAT] = v }
suspend fun setPlaylist(v: String?) = context.dataStore.edit {
if (v == null) it.remove(PLAYLIST) else it[PLAYLIST] = v
}
}