/**
 * 用户模型
 * 原始 Dart: User (lib/data/models/user/user.dart)
 */
import { z } from "zod";
import { PersonalityTraitsSchema, PERSONALITY_TRAITS_DEFAULTS } from "./personality_traits";
import {
  booleanOrFalse,
  numberOrZero,
  stringOrEmpty,
} from "../nullable-defaults";

export const UserSchema = z.object({
  id: stringOrEmpty, // 兜底：理论 id 不会 null，但保持防御
  username: stringOrEmpty,
  email: stringOrEmpty,
  platform: stringOrEmpty,
  intimacy: numberOrZero,
  dolBalance: numberOrZero,
  relationshipStage: stringOrEmpty,
  currentMood: stringOrEmpty,
  personalityTraits: PersonalityTraitsSchema.default(PERSONALITY_TRAITS_DEFAULTS),
  preferredLanguage: stringOrEmpty,
  createdAt: stringOrEmpty,
  // 后端新游客返回 null（"还没发过消息"），前端统一收敛为空字符串。
  lastMessageAt: stringOrEmpty,
  avatarUrl: stringOrEmpty,
  loginProvider: stringOrEmpty,
  isGuest: booleanOrFalse,
  /** 是否为 VIP 会员（订阅中或未过期） */
  isVip: booleanOrFalse,
  /** 语音聊天剩余分钟数（订阅生效后每天补充；用完为 0 不变） */
  voiceMinutesRemaining: numberOrZero,
});

export type UserInput = z.input<typeof UserSchema>;
export type UserData = z.output<typeof UserSchema>;
