// manager/PreferenceManager.kt
package com.example.initiateaphonecallapp.manager

import android.content.Context
import android.content.SharedPreferences

object PreferenceManager {
    private const val PREFS_NAME = "app_login_prefs"

    // 键名常量
    private const val KEY_USERNAME = "username"
    private const val KEY_PASSWORD = "password"
    private const val KEY_AUTH_TOKEN = "auth_token"
    private const val KEY_REMEMBER_ME = "remember_me"
    private const val KEY_AUTO_LOGIN = "auto_login"

    // 不再需要 MyApplication，改为在初始化时传入 Context
    private var sharedPreferences: SharedPreferences? = null

    // 初始化方法，在应用启动时调用
    fun initialize(context: Context) {
        sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
        // 恢复 token
        restoreToken()
        println("🔐 PreferenceManager: 初始化完成")
    }

    private fun getPrefs(): SharedPreferences {
        return sharedPreferences ?: throw IllegalStateException("PreferenceManager 未初始化，请先调用 initialize()")
    }

    // 保存登录信息
    fun saveLoginInfo(
        username: String,
        password: String,
        token: String,
        rememberMe: Boolean = false,
        autoLogin: Boolean = false
    ) {
        getPrefs().edit().apply {
            putString(KEY_USERNAME, username)
            if (rememberMe || autoLogin) {
                putString(KEY_PASSWORD, password)
            } else {
                remove(KEY_PASSWORD)
            }
            putString(KEY_AUTH_TOKEN, token)
            putBoolean(KEY_REMEMBER_ME, rememberMe)
            putBoolean(KEY_AUTO_LOGIN, autoLogin)
            apply()
        }
        // 同时更新 TokenManager
        TokenManager.setToken(token)
        println("🔐 PreferenceManager: 登录信息已保存 - 用户: $username, 记住我: $rememberMe, 自动登录: $autoLogin")
    }

    // 获取保存的用户名
    fun getSavedUsername(): String {
        return getPrefs().getString(KEY_USERNAME, "") ?: ""
    }

    // 获取保存的密码
    fun getSavedPassword(): String {
        return getPrefs().getString(KEY_PASSWORD, "") ?: ""
    }

    // 获取保存的 token
    fun getSavedToken(): String? {
        return getPrefs().getString(KEY_AUTH_TOKEN, null)
    }

    // 是否启用了记住我
    fun isRememberMe(): Boolean {
        return getPrefs().getBoolean(KEY_REMEMBER_ME, false)
    }

    // 是否启用了自动登录
    fun isAutoLogin(): Boolean {
        return getPrefs().getBoolean(KEY_AUTO_LOGIN, false)
    }

    // 检查是否有保存的登录信息
    fun hasSavedLoginInfo(): Boolean {
        return getSavedUsername().isNotEmpty() && getSavedPassword().isNotEmpty()
    }

    // 检查是否有有效的 token
    fun hasValidToken(): Boolean {
        return !getSavedToken().isNullOrEmpty()
    }

    // 清除所有登录信息（退出登录时调用）
    fun clearLoginInfo() {
        getPrefs().edit().apply {
            remove(KEY_USERNAME)
            remove(KEY_PASSWORD)
            remove(KEY_AUTH_TOKEN)
            remove(KEY_REMEMBER_ME)
            remove(KEY_AUTO_LOGIN)
            apply()
        }
        // 同时清除 TokenManager 中的 token
        TokenManager.clearToken()
        println("🔐 PreferenceManager: 登录信息已清除")
    }

    // 恢复 token 到 TokenManager
    fun restoreToken() {
        val savedToken = getSavedToken()
        savedToken?.let { token ->
            TokenManager.setToken(token)
            println("🔑 PreferenceManager: Token 已恢复")
        } ?: run {
            println("🔑 PreferenceManager: 没有保存的 Token")
        }
    }
}