package com.tsmobile.app.data

import android.content.Context
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.longPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

private val Context.updateDataStore by preferencesDataStore(name = "update_settings")

/**
 * 更新检测偏好持久化。
 *
 * 记录已忽略的版本号和上次检查时间戳，
 * 避免重复提示同一版本和频繁请求API。
 */
class UpdatePreferences(private val context: Context) {

    companion object {
        private val DISMISSED_VERSION_KEY = stringPreferencesKey("dismissed_version")
        private val LAST_CHECK_TIMESTAMP_KEY = longPreferencesKey("last_check_timestamp")
    }

    /**
     * 已忽略的版本号（默认空字符串表示未忽略任何版本）。
     */
    val dismissedVersion: Flow<String> = context.updateDataStore.data.map { prefs ->
        prefs[DISMISSED_VERSION_KEY] ?: ""
    }

    /**
     * 上次检查时间戳（默认0表示从未检查过）。
     */
    val lastCheckTimestamp: Flow<Long> = context.updateDataStore.data.map { prefs ->
        prefs[LAST_CHECK_TIMESTAMP_KEY] ?: 0L
    }

    /**
     * 保存已忽略的版本号。
     */
    suspend fun setDismissedVersion(version: String) {
        context.updateDataStore.edit { prefs ->
            prefs[DISMISSED_VERSION_KEY] = version
        }
    }

    /**
     * 保存上次检查时间戳。
     */
    suspend fun setLastCheckTimestamp(ts: Long) {
        context.updateDataStore.edit { prefs ->
            prefs[LAST_CHECK_TIMESTAMP_KEY] = ts
        }
    }
}
