import { useState, useEffect } from "react"; import { Eye, Clock, LogOut, FileSearch } from "lucide-react"; import type { ImpersonationSession } from "@groombook/types"; interface Props { session: ImpersonationSession; isExtended: boolean; onEnd: () => void; onExtend: () => void; onShowAudit: () => void; } export function ImpersonationBanner({ session, isExtended, onEnd, onExtend, onShowAudit }: Props) { const [remaining, setRemaining] = useState(""); const [showWarning, setShowWarning] = useState(false); useEffect(() => { const tick = () => { const now = Date.now(); const expires = new Date(session.expiresAt).getTime(); const diff = expires - now; if (diff <= 0) { setRemaining("Expired"); onEnd(); return; } const mins = Math.floor(diff / 60000); const secs = Math.floor((diff % 60000) / 1000); setRemaining(`${mins}:${secs.toString().padStart(2, "0")}`); setShowWarning(mins < 5); }; tick(); const id = setInterval(tick, 1000); return () => clearInterval(id); }, [session.expiresAt, onEnd]); return (
STAFF VIEW {session.reason && ( Reason: {session.reason} )} Started {new Date(session.startedAt).toLocaleTimeString()}
{remaining} {showWarning && !isExtended && ( )}
); }