/**
 * 聊天 UI 消息模型
 *
 * 
 *
 * 字段：content、isFromAI、date、imageUrl（可选）、audioUrl（可选）
 */
import { z } from "zod";

export const UiMessageSchema = z.object({
  id: z.string().optional(),
  content: z.string(),
  isFromAI: z.boolean(),
  /** 日期分隔条使用的本地日期（YYYY-MM-DD） */
  date: z.string(),
  /** 图片 URL（base64 data URL 或 http URL） */
  imageUrl: z.string().optional(),
  /** true = 图片可在列表展示，但全屏查看时需要会员解锁 */
  imagePaywalled: z.boolean().optional(),
  /** 语音 URL */
  audioUrl: z.string().optional(),
  locked: z.boolean().nullable().optional(),
  lockReason: z.string().nullable().optional(),
  isPrivate: z.boolean().nullable().optional(),
  lockedPrivate: z.boolean().nullable().optional(),
  privateMessageHint: z.string().nullable().optional(),
});

export type UiMessage = z.infer<typeof UiMessageSchema>;

/** 工厂函数（替代 Dart `UiMessage(content:..., isFromAI:...)` 构造）。 */
export const UiMessage = {
  create(input: Omit<UiMessage, "date"> & { date?: string }): UiMessage {
    return UiMessageSchema.parse({
      ...input,
      date:
        input.date ??
        new Date().toLocaleTimeString([], {
          hour: "2-digit",
          minute: "2-digit",
        }),
    });
  },
};
