/**
 * Auth 状态机：State 形状 + 初始值
 */
import type { AuthMode, AuthPanelMode, LoginStatus } from "@/data/dto/auth";

export interface AuthState {
  /** 当前面板模式（Facebook / Email） */
  authPanelMode: AuthPanelMode;
  /** 内部登录模式（login / register） */
  authMode: AuthMode;
  email: string;
  password: string;
  username: string;
  confirmPassword: string;
  errorMessage: string | null;
  /** 当前登录状态（未登录 / 游客 / OAuth / 邮箱）—— 下游同步器监听此字段的双向变化 */
  loginStatus: LoginStatus;
  /** 启动时的本地登录态恢复是否已经完成 */
  hasInitialized: boolean;
  /**
   * 一次性的"刚按了"信号 —— Skip / Facebook / 邮箱登录按钮刚派事件 → 置 true
   *   → splash-screen / auth-screen 看到 `pendingRedirect && loginStatus !== "notLoggedIn"` 触发跳转
   *   → 跳完置 false
   *
   * 历史：之前用 useRef 做 transition detection，但 re-mount 时 ref 重置，bug 复发。
   *       现在 auth state 里持久（machine 不重置）—— re-mount 时也能区分"刚按"和"历史"。
   */
  pendingRedirect: boolean;
}

export const initialState: AuthState = {
  authPanelMode: "facebook",
  authMode: "login",
  email: "",
  password: "",
  username: "",
  confirmPassword: "",
  errorMessage: null,
  loginStatus: "notLoggedIn",
  hasInitialized: false,
  pendingRedirect: false,
};
