"use client"; import React from "react"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { LifeBuoy, LogOut, User } from "lucide-react"; import { cn } from "@/lib/utils"; import { useAuth } from "@/components/auth/authContext"; import { logout } from "@/lib/frontend/apiClient"; import { buildLoginUrl, LOGIN_REASONS } from "@/lib/frontend/authRedirect"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; function formatRole(role) { if (role === "branch") return "Niederlassung"; if (role === "admin") return "Admin"; if (role === "dev") return "Entwicklung"; return role ? String(role) : "Unbekannt"; } function buildSupportMailto({ user, currentUrl, pathname, userAgent }) { const to = "info@attus.de"; const roleLabel = user ? formatRole(user.role) : "Unbekannt"; const userLabel = user?.branchId ? `${roleLabel} (${user.branchId})` : roleLabel; const now = new Date(); const tz = typeof Intl !== "undefined" ? Intl.DateTimeFormat().resolvedOptions().timeZone : ""; const timestampLocal = now.toLocaleString("de-DE"); const timestampIso = now.toISOString(); const routeLine = pathname ? `Route: ${pathname}` : "Route: (unbekannt)"; const urlLine = currentUrl ? `URL: ${currentUrl}` : "URL: (bitte einfügen)"; const uaLine = userAgent ? `User-Agent: ${userAgent}` : "User-Agent: (unbekannt)"; const timeLine = tz ? `Zeitpunkt: ${timestampLocal} (${tz})` : `Zeitpunkt: ${timestampLocal}`; const isoLine = `ISO: ${timestampIso}`; const subject = user?.branchId ? `Support – RHL Lieferscheine (${user.branchId})` : "Support – RHL Lieferscheine"; const body = [ "Hallo attus Support,", "", "bitte beschreibt hier kurz das Anliegen:", "", "- Was wollten Sie tun?", "- Was ist passiert?", "- (Optional) Screenshot / Zeitpunkt", "", "--- Kontext (bitte drin lassen) ---", `Benutzer: ${userLabel}`, routeLine, urlLine, timeLine, isoLine, uaLine, "----------------------------------", "", "Vielen Dank.", ].join("\r\n"); return `mailto:${to}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent( body, )}`; } export default function UserStatus() { const pathname = usePathname() || "/"; const { status, user } = useAuth(); const isAuthenticated = status === "authenticated" && user; let text = "Nicht geladen"; if (status === "loading") text = "Lädt…"; if (isAuthenticated) { const roleLabel = formatRole(user.role); text = user.branchId ? `${roleLabel} (${user.branchId})` : roleLabel; } if (status === "unauthenticated") text = "Abgemeldet"; if (status === "error") text = "Fehler"; const currentUrl = typeof window !== "undefined" ? window.location.href : ""; const userAgent = typeof navigator !== "undefined" ? navigator.userAgent : ""; const supportMailto = buildSupportMailto({ user, currentUrl, pathname, userAgent, }); const isProfileActive = pathname === "/profile" || pathname.startsWith("/profile/"); async function handleLogout() { try { await logout(); } catch (err) { console.error("[UserStatus] logout failed:", err); } const loginUrl = buildLoginUrl({ reason: LOGIN_REASONS.LOGGED_OUT }); window.location.replace(loginUrl); } return ( Benutzermenü Benutzer
{isAuthenticated ? `Angemeldet als: ${text}` : "Keine aktive Sitzung."}
{ e.preventDefault(); handleLogout(); }} >
); }