package com.jishisongfu.duobibi.util

import android.content.Context

/**
 * 一键登录后的账号持久化(本地侧)。phone 当账号主键(占坑期方案,后续可升级 user_id)。
 *
 * 写入点:[com.jishisongfu.duobibi.auth.PhoneBindViewModel] 收到后端解密手机号后
 * 清除点:Mine 页"解绑"按钮(本地清,本地 wish 数据保留以便后续换号合并)
 *
 * 设计上跟 [PrivacyPrefs] 一致 —— 简单 KV,不引入 Datastore。
 */
object AuthPrefs {

    private const val PREFS = "auth_prefs"
    private const val KEY_PHONE = "phone"
    private const val KEY_BOUND_AT = "bound_at"
    private const val KEY_LAST_SYNCED_AT = "wish_last_synced_at"

    /** 当前绑定的手机号,null = 未绑定 */
    fun phone(ctx: Context): String? =
        ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE).getString(KEY_PHONE, null)

    fun isBound(ctx: Context): Boolean = phone(ctx) != null

    /** 绑定时间戳(ms),用于 UI 展示;phone == null 时此字段无意义 */
    fun boundAt(ctx: Context): Long =
        ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE).getLong(KEY_BOUND_AT, 0L)

    fun setBound(ctx: Context, phone: String, boundAt: Long = System.currentTimeMillis()) {
        ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
            .edit()
            .putString(KEY_PHONE, phone)
            .putLong(KEY_BOUND_AT, boundAt)
            .apply()
    }

    fun clear(ctx: Context) {
        ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
            .edit()
            .remove(KEY_PHONE)
            .remove(KEY_BOUND_AT)
            .remove(KEY_LAST_SYNCED_AT)
            .apply()
    }

    /** 心愿单上次同步成功的时间戳(ms)。0 = 从未同步过。换号要清。 */
    fun wishLastSyncedAt(ctx: Context): Long =
        ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE).getLong(KEY_LAST_SYNCED_AT, 0L)

    fun setWishLastSyncedAt(ctx: Context, ts: Long) {
        ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
            .edit()
            .putLong(KEY_LAST_SYNCED_AT, ts)
            .apply()
    }

    /** 掩码手机号,UI 展示用:138****1511 */
    fun maskedPhone(phone: String): String {
        if (phone.length < 7) return phone
        return phone.take(3) + "****" + phone.takeLast(4)
    }
}
