import { User } from "@/lib/api"; function isSafeImageUrl(url: string): boolean { try { const u = new URL(url); return u.protocol === "https:" || u.protocol === "http:"; } catch { return false; } } interface MovieMeta { movieTitle: string; releaseYear?: number; posterUrl?: string | null; rating?: number; comment?: string | null; watchedAt?: string | null; watchlistEntry?: boolean; } interface MovieCardProps { meta: MovieMeta; author: User; createdAt: Date; } function StarRating({ rating, max = 5 }: { rating: number; max?: number }) { return (
{Array.from({ length: max }).map((_, i) => ( โ˜… ))}
); } export function MovieCard({ meta, author, createdAt }: MovieCardProps) { const isWatchlist = meta.watchlistEntry === true; const year = meta.releaseYear ? ` (${meta.releaseYear})` : ""; const watchedDate = meta.watchedAt ? new Date(meta.watchedAt).toLocaleDateString(undefined, { year: "numeric", month: "short", day: "numeric", }) : null; return (
{/* Poster */}
{meta.posterUrl && isSafeImageUrl(meta.posterUrl) ? ( {meta.movieTitle} ) : (
No poster
)}
{/* Info */}

{meta.movieTitle} {year && {year}}

{isWatchlist ? (

๐Ÿ“‹ Want to watch

) : ( <> {meta.rating !== undefined && (
)} {watchedDate && (

Watched {watchedDate}

)} )} {meta.comment && (

{meta.comment}

)}
{/* Footer */}
@{author.username} ยท {createdAt.toLocaleDateString()}
); }