"use client"; import Image from "next/image"; import { useTranslations } from "next-intl"; import { QRCodeSVG } from "qrcode.react"; import { Printer } from "lucide-react"; import { brand } from "@/data/brand"; import { memberScanPayload, resolveAvatarUrl, resolveCardId, } from "@/lib/avatar"; import type { Member, Organisation } from "@/types"; import { Button } from "@/components/ui/button"; import { StatusBadge } from "@/components/shared/status-badge"; import { cn } from "@/lib/utils"; export type MemberIdCardProps = { member: Member; organisation: Pick; packageName?: string; className?: string; /** Hide the print toolbar (e.g. when embedding) */ hideActions?: boolean; }; export function MemberIdCard({ member, organisation, packageName, className, hideActions = false, }: MemberIdCardProps) { const t = useTranslations("idCard"); const verificationId = member.verificationId ?? member.employeeId; const cardId = resolveCardId({ cardId: member.cardId, verificationId: member.verificationId, employeeId: member.employeeId, memberId: member.id, }); const scanPayload = memberScanPayload(member.id, verificationId); const photoUrl = resolveAvatarUrl(member.avatarUrl, member.id); function handlePrint() { window.print(); } return (
{!hideActions ? (

{t("title")}

{t("subtitle")}

) : null} {/* Screen preview + print target */}
{/* Accent stripe */}
{/* Header */}
{brand.shortName}

{brand.shortName}

{t("pharmacyId")}

{/* Body */}
{/* External DiceBear portrait — not next/image remotePatterns */} {/* eslint-disable-next-line @next/next/no-img-element */} {member.name}

{member.name}

{organisation.tradeName}

{t("employeeId")}
{member.employeeId}
{t("cardId")}
{cardId}
{packageName ? (
{t("package")}
{packageName}
) : null}
{verificationId}
{/* Footer */}

{t("scanHint")} {organisation.joinCode ? ` · ${t("orgCode")}: ${organisation.joinCode}` : null}

{cardId}

{t("printHint")}

); }