//
//  AppSession.swift
//  suixinkan
//
//  Created by Codex on 2026/6/18.
//

import Foundation
import Observation

/// 登录阶段实体，表示根视图当前应该展示的认证状态。
enum AuthPhase: Equatable {
    case loggedOut
    case restoring
    case loggedIn
}

@MainActor
@Observable
/// 登录会话状态中心，保存 token 和当前认证阶段。
final class AppSession {
    private(set) var phase: AuthPhase = .loggedOut
    private(set) var token: String?

    var isLoggedIn: Bool {
        phase == .loggedIn
    }

    /// 将会话切换到恢复中状态，用于冷启动恢复登录态。
    func beginRestoring(token: String? = nil) {
        self.token = token?.trimmingCharacters(in: .whitespacesAndNewlines)
        phase = .restoring
    }

    /// 标记登录成功并保存正式 token。
    func markLoggedIn(token: String? = nil) {
        self.token = token?.trimmingCharacters(in: .whitespacesAndNewlines)
        phase = .loggedIn
    }

    /// 清空 token 并回到未登录状态。
    func logout() {
        token = nil
        phase = .loggedOut
    }
}
