/**
 * Zod 默认值辅助器（处理 `null | undefined` → 标量默认）
 *
 * 防御性解析：后端对 Facebook / Apple 等 OAuth 用户可能返回 `null`（如 `email: null`），
 * Zod 默认的 `.default("")` 只接受 `undefined`，遇到 `null` 会抛 ZodError → 登录静默失败。
 * 用 `z.string().nullable().transform(v => v ?? "").default("")` 模式：
 *   - input 接受 `string | null | undefined`（保持 optional）
 *   - output 永远是 `string`（User 类的 `email: string` 声明不会破）
 *
 * 这是前端防御性解析（不要求后端修改）—— 和后端对齐更稳。
 */
import { z } from "zod";

/** `string | null | undefined` → `string`（默认空串） */
export const stringOrEmpty = z
  .string()
  .nullable()
  .transform((v) => v ?? "")
  .default("");

/** `string | null | undefined` → `string | null`（默认 null） */
export const stringOrNull = z.string().nullable().default(null);

/** `number | null | undefined` → `number`（默认 0） */
export const numberOrZero = z
  .number()
  .nullable()
  .transform((v) => v ?? 0)
  .default(0);

/** `boolean | null | undefined` → `boolean`（默认 false） */
export const booleanOrFalse = z
  .boolean()
  .nullable()
  .transform((v) => v ?? false)
  .default(false);
