//
//  AppStore.swift
//  suixinkan
//

import Foundation

/// 应用本地存储统一入口，负责组装各功能模块并协调退出登录清理。
final class AppStore {

    /// 全局应用存储。
    static let shared = AppStore()

    /// 登录会话与当前账号存储。
    let session: AppSessionStore

    /// 角色权限与首页权限缓存。
    let permissions: AppPermissionStore

    /// 位置上报会话存储。
    let location: AppLocationStore

    /// 收款功能偏好存储。
    let payment: AppPaymentStore

    /// 景区排队功能存储。
    let scenicQueue: AppScenicQueueStore

    /// 使用指定 UserDefaults 创建模块化应用存储。
    init(defaults: UserDefaults = .standard) {
        AppStoreCacheMigrator.migrateIfNeeded(defaults: defaults)
        let session = AppSessionStore(defaults: defaults)
        self.session = session
        permissions = AppPermissionStore(defaults: defaults, session: session)
        location = AppLocationStore(defaults: defaults, session: session)
        payment = AppPaymentStore(defaults: defaults, session: session)
        scenicQueue = AppScenicQueueStore(defaults: defaults, session: session)
    }

    /// 清除当前账号业务快照与登录态，保留隐私授权和上次登录用户名。
    func logout() {
        let accountScope = session.accountCachePrefix
        permissions.clear(accountScope: accountScope)
        location.clear(accountScope: accountScope)
        payment.clear(accountScope: accountScope)
        scenicQueue.clear(accountScope: accountScope)
        session.clearAuthenticatedSession(accountScope: accountScope)
    }
}
