package com.novayaplaneta.data.local import android.content.Context import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.preferencesDataStore import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map import javax.inject.Inject import javax.inject.Singleton private val Context.dataStore: DataStore by preferencesDataStore(name = "auth_preferences") @Singleton class TokenManager @Inject constructor( @ApplicationContext private val context: Context ) { private val accessTokenKey = stringPreferencesKey("access_token") private val refreshTokenKey = stringPreferencesKey("refresh_token") val accessToken: Flow = context.dataStore.data.map { preferences -> preferences[accessTokenKey] } val refreshToken: Flow = context.dataStore.data.map { preferences -> preferences[refreshTokenKey] } suspend fun getAccessToken(): String? { return accessToken.first() } suspend fun getRefreshToken(): String? { return refreshToken.first() } suspend fun saveTokens(accessToken: String, refreshToken: String) { context.dataStore.edit { preferences -> preferences[accessTokenKey] = accessToken preferences[refreshTokenKey] = refreshToken } } suspend fun clearTokens() { context.dataStore.edit { preferences -> preferences.remove(accessTokenKey) preferences.remove(refreshTokenKey) } } suspend fun isAuthenticated(): Boolean { return getAccessToken() != null } }