//
//  AppPreferencesStore.swift
//  suixinkan
//
//  Created by Codex on 2026/6/20.
//

import Foundation
import Observation

@Observable
/// App 偏好存储服务，保存上次手机号和协议状态等非敏感设置。
final class AppPreferencesStore {
    @ObservationIgnored private let defaults: UserDefaults
    @ObservationIgnored private let lastLoginUsernameKey = "suixinkan.preferences.last_login_username"
    @ObservationIgnored private let privacyAgreementAcceptedKey = "suixinkan.preferences.privacy_agreement_accepted"

    /// 初始化偏好存储服务，并允许测试注入独立的 UserDefaults。
    init(defaults: UserDefaults = .standard) {
        self.defaults = defaults
    }

    /// 保存上次成功登录的手机号。
    func saveLastLoginUsername(_ username: String) {
        let value = username.trimmingCharacters(in: .whitespacesAndNewlines)
        guard !value.isEmpty else { return }
        defaults.set(value, forKey: lastLoginUsernameKey)
    }

    /// 读取上次成功登录的手机号。
    func loadLastLoginUsername() -> String? {
        let value = defaults.string(forKey: lastLoginUsernameKey)?
            .trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
        return value.isEmpty ? nil : value
    }

    /// 保存用户是否已经同意登录页协议。
    func savePrivacyAgreementAccepted(_ accepted: Bool) {
        defaults.set(accepted, forKey: privacyAgreementAcceptedKey)
    }

    /// 读取用户是否已经同意登录页协议。
    func loadPrivacyAgreementAccepted() -> Bool {
        defaults.bool(forKey: privacyAgreementAcceptedKey)
    }
}
