/**
 * Chat 状态机：事件联合
 *
 * 事件名与原 Dart ChatEvent 对齐。
 *
 * 历史：原本有 `ChatAuthStatusChanged`（chat 机器刷新 isGuest）—— 已删。
 * 鉴权状态变化（loginStatus）由 <ChatAuthSync /> 通过 `useAuthState()` 订阅，
 * chat 机器不感知鉴权。
 *
 * 鉴权生命周期事件（本轮新增）：
 *   - `ChatGuestLogin`：游客进入 /chat —— 拉本地消息 + 初始化配额（不连 WS）
 *   - `ChatNonGuestLogin`：非游客进入 /chat —— 拉服务器端首屏 + 连 WS（token 在 payload）
 *   - `ChatLogout`：登出 / 切换用户 —— 断 WS + 清消息
 *
 * 设计：所有WS / 历史 / 配额相关副作用全部通过派发事件给 chat 机器处理，
 * chat-screen 不直接创建 ChatWebSocket / 不读 AuthStorage（除 token 取值）。
 */
export type ChatEvent =
  // 鉴权生命周期（登录态变化后由 ChatAuthSync 派）
  | { type: "ChatGuestLogin" }
  | { type: "ChatNonGuestLogin"; token: string }
  | { type: "ChatLogout" }
  // 业务事件
  | { type: "ChatSendMessage"; content: string }
  | { type: "ChatSendImage"; imageBase64: string }
  | { type: "ChatLoadMoreHistory" }
  // WebSocket / AI 推句（由 chat 机器内部 actor 派回 —— "机器自驱动"）
  | {
      type: "ChatAISentenceReceived";
      index: number;
      text: string;
      total: number;
      done: boolean;
    }
  | { type: "ChatWebSocketError"; errorMessage: string }
  | { type: "ChatWebSocketConnected"; userId: string }
  | { type: "ChatQuotaExceeded" };
