import type { MessageMetadata, MessageRecord } from "../../types/messages"; function parseMetadata(value: string | null): MessageMetadata { if (!value) return {}; try { return JSON.parse(value) as MessageMetadata; } catch { return {}; } } interface ImageItem { url: string; title: string; kind: "attachment" | "embed" | "sticker"; message: MessageRecord; } export function ImageGrid({ messages }: { messages: MessageRecord[] }) { const images: ImageItem[] = []; for (const message of messages) { const metadata = parseMetadata(message.metadata); // Stickers for (const sticker of metadata.stickers ?? []) { if (sticker.url) { images.push({ url: sticker.url, title: sticker.name || "sticker", kind: "sticker", message }); } } // Attachments for (const attachment of metadata.attachments ?? []) { if (attachment.url && (attachment.contentType?.startsWith("image/") || /\.(png|jpe?g|gif|webp)$/i.test(attachment.name))) { images.push({ url: attachment.url, title: attachment.name, kind: "attachment", message }); } } // Embed images for (const embed of metadata.embeds ?? []) { for (const imgUrl of [embed.image, embed.thumbnail].filter(Boolean)) { images.push({ url: imgUrl as string, title: embed.title || "embed image", kind: "embed", message }); } } } if (images.length === 0) { return