package com.dano.test1.network

import android.content.Context

/*
TokenStore
 - Kleiner Helper zum Verwalten der Login-Sitzung
 - Speichert:
     * das API-Token (KEY_TOKEN),
     * den Usernamen (KEY_USER),
     * den Zeitpunkt des Logins in Millisekunden (KEY_LOGIN_TS).
 - Bietet Lese-/Schreib-Methoden sowie ein clear(), um alles zurückzusetzen.

Hinweis:
 - Die Daten liegen in einer privaten App-Preference-Datei (PREF = "qdb_prefs").
 - getLoginTimestamp() eignet sich, um die Token-„Frische“ (Alter) zu berechnen.
*/
object TokenStore {
    private const val PREF = "qdb_prefs"
    private const val KEY_TOKEN = "token"
    private const val KEY_USER = "user"
    private const val KEY_LOGIN_TS = "login_ts"

    fun save(context: Context, token: String, username: String) {
        val now = System.currentTimeMillis()
        context.getSharedPreferences(PREF, Context.MODE_PRIVATE)
            .edit()
            .putString(KEY_TOKEN, token)   // API-/Session-Token
            .putString(KEY_USER, username) // angemeldeter Benutzername
            .putLong(KEY_LOGIN_TS, now)    // Zeitpunkt des Logins
            .apply()
    }

    fun getToken(context: Context): String? =
        context.getSharedPreferences(PREF, Context.MODE_PRIVATE).getString(KEY_TOKEN, null)

    fun getUsername(context: Context): String? =
        context.getSharedPreferences(PREF, Context.MODE_PRIVATE).getString(KEY_USER, null)

    fun getLoginTimestamp(context: Context): Long =
        context.getSharedPreferences(PREF, Context.MODE_PRIVATE).getLong(KEY_LOGIN_TS, 0L)

    fun clear(context: Context) {
        context.getSharedPreferences(PREF, Context.MODE_PRIVATE).edit().clear().apply()
    }
}
